我正在尝试使用OGL ES旋转2D图像。加载后我可以通过屏幕移动它,但是当试图通过它的中心旋转图像时,它有一个奇怪的行为,因为旋转中心是左下角的屏幕角,而不是图像本身的中心。
谷歌搜索我已经读过我可以推动当前矩阵,改变我需要的任何东西(翻译坐标,旋转图像等)然后弹出矩阵回到之前的矩阵状态......我做到了但仍然没有按照我的要求工作(但至少现在看起来旋转的原始坐标不是左下角......)
有什么想法?任何人都可以发现我的问题在哪里?
任何帮助将不胜感激!谢谢!
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 :(得分:0)
最重要的是,您需要了解如何执行此操作。
在进行旋转之前,您必须在旋转原点中平移自己,然后才应用于旋转。
查看this article,它解释得很清楚。
简单的细分是: