J'essaye de faire pivoter une image 2D en utilisant OGL ES. Après le chargement, je peux le déplacer à travers l'écran, mais en essayant de faire pivoter l'image par son centre, il a un comportement étrange car le centre de rotation est le coin inférieur gauche de l'écran, pas le centre de l'image. Googling around J'ai lu que je pouvais pousser la matrice actuelle, changer tout ce dont j'avais besoin (traduire les coordonnées, faire pivoter l'image, etc.) puis faire apparaître la matrice revenant à l'état matriciel précédent ... Je l'ai fait mais je ne travaille toujours pas comme je le cherche (mais au moins maintenant, il semble que les coordonnées d'origine où il fait la rotation ne sont pas le coin inférieur gauche ...)Rotation d'image OpenGL ES 1.1 à partir de son centre
Des pensées? Quelqu'un pourrait repérer où mon problème est?
Toute aide serait grandement appréciée! Merci!!
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();
}
Mise en forme du code. – genpfault
Je l'ai fait mais ne fonctionnait pas correctement. Désolé ... Maintenant cela a fonctionné;) – Maruku