Я пытаюсь повернуть 2D-изображение с помощью OGL ES.После загрузки я могу перемещать его по экрану, но при попытке повернуть изображение через его центр, это имеет странное поведение, поскольку центр вращения - это левый нижний угол экрана, а не центр самого изображения.
Поглядывая вокруг, я прочитал, что могу нажать текущую матрицу, изменить все, что мне нужно (перевести координаты, повернуть изображение и т. Д.), А затем вытолкнуть матрицу, возвращающуюся к предыдущему состоянию матрицы ...все еще не работает так, как я ищу (но, по крайней мере, теперь кажется, что исходные координаты, где он вращается, не являются левым нижним углом ...)
Есть мысли?Кто-нибудь может определить, где моя проблема?
Любая помощь будет высоко ценится!Спасибо !!
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();
}