2010-10-21 54 views
0

我想使用OGL ES旋轉2D圖像。加載後,我可以將其移動通過屏幕,但是當試圖通過其中心旋轉圖像時,它具有奇怪的行爲,因爲旋轉中心是屏幕左下角,而不是圖像本身的中心。從其中心OpenGL ES 1.1圖像旋轉

谷歌搜索我讀過,我可以推動當前的矩陣,改變我需要的任何東西(翻譯座標,旋轉圖像等),然後彈出矩陣回到前一個矩陣狀態......我做了它但仍然不工作,因爲我正在尋找(但至少現在看起來原來的旋轉座標不是左下角......)

有什麼想法?任何人都可以發現我的問題在哪裏?

任何幫助將不勝感激!謝謝!!

void drawImage(Image *img) 
{ 

    GLfloat fX = (GLfloat)img->x; 

    GLfloat fY = (GLfloat)(flipY(img->m_height+img->y)); 

    GLfloat coordinates[] = { 0, img->m_textureHeight, img->m_textureWidth, img->m_textureHeight, 0, 0, img->m_textureWidth, 0 }; 
    GLfloat  vertices[] = 
    { 
     fX, fY, 0.0, 
     img->m_width+fX, fY, 0.0, 
     fX, img->m_height+fY, 0.0, 
     img->m_width+fX, img->m_height+fY, 0.0 
    }; 

    //Push and change de matrix, translate coords, rotate and scale image and then pop the matrix 
    glPushMatrix(); //push texture matrix 
    glTranslatef((int)fX, (int)fY, 0.0); //translate texture matrix 

    // rotate 
    if (img->rotation != 0.0f) 
     glRotatef(-img->rotation, 0.0f, 0.0f, 1.0f); 

    // scale 
    if (img->scaleX != 1.0f || img->scaleY != 1.0f) 
     glScalef(img->scaleX, img->scaleY, 1.0f); 

    glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); 

    glEnableClientState(GL_TEXTURE_COORD_ARRAY); 

    glColor4f(1.0, 0.0, 0.0, 1.0); 
    glBindTexture(GL_TEXTURE_2D, img->m_name); 
    glVertexPointer(3, GL_FLOAT, 0, vertices); 
    glTexCoordPointer(2, GL_FLOAT, 0, coordinates); 
    glDrawArrays(GL_TRIANGLE_STRIP, 0, 4); 

    glDisableClientState(GL_TEXTURE_COORD_ARRAY); 

    glPopMatrix(); 
} 
+0

代碼格式化。 – genpfault 2010-10-21 17:30:28

+1

我做到了,但沒有正常工作。對不起...現在它的工作;) – Maruku 2010-10-21 17:32:59

回答

0

最重要的是,您需要了解如何執行此操作。

在做旋轉之前,您必須在旋轉原點上翻譯您的自我,然後才應用於旋轉。

檢查出this article這解釋得很好。

的簡單故障是:

  • 移動對象到原點。
  • 旋轉。
  • 移回對象。
+0

我試圖做到這一點,但一些工作不好。我以前的代碼中添加了glTranslatef( - (int)fX, - (int)fY,0.0);在做完所有更改後回到原來的位置,但仍然無法正常工作。我將閱讀你提供給我的鏈接。謝謝! – Maruku 2010-10-21 18:11:50