2014-11-22 106 views
0

我想旋轉圖像的中心。這裏是代碼:無法在openGL中圍繞圖像旋轉我的圖像

glPushMatrix(); 
    glTranslatef(-x, -y, 0); 
    glRotatef(10, 0, 0, 1); 
    glTranslatef(x, y, 0); 
    glBindTexture(GL_TEXTURE_2D, img); 
    glBegin(GL_QUADS); 
    glTexCoord2i(0, 0); 
    glVertex2i(x, y); 
    glTexCoord2i(1, 0); 
    glVertex2i(x+width, y); 
    glTexCoord2i(1, 1); 
    glVertex2i(x+width, y+height); 
    glTexCoord2i(0, 1); 
    glVertex2i(x, y + height); 
    glEnd(); 
    glPopMatrix(); 

我到處閱讀將我的圖像翻譯成旋轉中心,然後旋轉並翻譯回來。 但是,當我試着做它一步一步發現,當我翻譯,然後旋轉它隨着圖像移動的旋轉中心,所以它圍繞一個點離屏幕上的距離圖像相同的距離作爲初始翻譯前初始圖像的旋轉點。 任何人都可以告訴我爲什麼會發生這種情況或如何解決它?

+0

我想你應該翻譯中心,而不是左上角(0,0)。 – 2014-11-22 13:44:49

回答

1

矩陣操作,因此glTranslatef/glRotatef按相反順序應用。所以當你的旋轉中心是c =(x,y)時,你必須首先沿着-c平移,然後旋轉然後沿着平移。

你的情況,你有兩個轉換線交換到以下幾點:

glTranslatef(x, y, 0); //Translate back 
glRotatef(10, 0, 0, 1); //Rotate 
glTranslatef(-x, -y, 0); //Translate first along -c 
+0

謝謝,這工作。不知道它是以相反的順序應用的。 – seMikel 2014-11-22 13:54:40

+0

它們在技術上是按照書面順序應用的,但它與乘積後列 - 主矩陣和矩陣乘法的非交換性質有關。這與您一般必須在GLSL着色器中編寫'projection * view * model * vtx'的原因相同,如果您有行主矩陣,而不是您可以編寫:'vtx * model * view * projection'並獲得相同的結果。 – 2014-11-22 15:50:13