2009-08-12 6 views
1

Je suis capable de dessiner un sprite sur l'écran d'un iPhone, mais quand j'essaye de le faire tourner, je reçois des résultats étranges. Il semble étirer le sprite dans la direction y plus il se rapproche de l'axe des ordonnées (90 et 270 degrés). Il s'affiche correctement en pointant vers le bas les axes x et -x (0 et 180 degrés). Il s'agit essentiellement de cisailler au lieu de tourner. Voici l'essentiel du code (matrice de projection est ortho):OpenGL ES glRotatef performant le cisaillement au lieu de tourner?

glPushMatrix(); 
    glLoadIdentity(); 
    glTranslatef(position.x, position.y, -1.0f);  
    glRotatef(rotation, 0.0f, 0.0f, 1.0f); 
    glScalef(halfSize.x, halfSize.y, 1.0f); 

    vertices[0] = 1.0f; 
    vertices[1] = 1.0f; 
    vertices[2] = 0.0f; 
    vertices[3] = 1.0f; 
    vertices[4] = -1.0f; 
    vertices[5] = 0.0f; 
    vertices[6] = -1.0f; 
    vertices[7] = 1.0f; 
    vertices[8] = 0.0f; 
    vertices[9] = -1.0f; 
    vertices[10] = -1.0f; 
    vertices[11] = 0.0f; 

    glVertexPointer(3, GL_FLOAT, 0, vertices); 
    glDrawArrays(GL_TRIANGLE_STRIP, 0, 4); 
glPopMatrix(); 

Quelqu'un peut-il me expliquer comment résoudre ce problème s'il vous plaît? La taille de demi est juste la moitié de l'étendue x et y de l'image-objet; la suppression de l'appel glScalef ne fait aucune différence.

Voici ma configuration matricielle:

glMatrixMode(GL_PROJECTION); 
glLoadIdentity(); 
glOrthof(0, 320, 480, 0, 0.01, 5); 
glMatrixMode(GL_MODELVIEW); 
glLoadIdentity(); 

OK, nous espérons que cette capture d'écran démontrera ce qui se passe:

+0

pourriez-vous montrer votre appel glOrtho? Je me demande si cela pourrait l'influencer. –

+0

qu'est ce que halfSize.x et halfSize.y? Cela arrive-t-il encore si vous supprimez la ligne glScalef? – Goz

+0

Tout semble bien à partir d'ici. Je posterais quelques captures d'écran. –

Répondre

3

Si vous mise à l'échelle par la même quantité dans les directions x et y , alors votre projection provoque la distorsion.

Juste une intuition, mais peut-être essayer d'échanger les 320 et 480 dans votre projection Ortho. (Dans le cas où le X et Y sur l'iPhone est permuté)

+0

Wow! C'était la réponse, merci beaucoup. Tout fonctionne maintenant! –

+0

Ne pas oublier d'accepter son poste AJ. – Goz

+0

Je le ferais, mais je ne vois pas comment faire pour le moment. Peut-être qu'il y a une limite de temps minimum ou je ne peux pas parce que je ne suis pas enregistré. Je reviendrai plus tard de toute façon. –