2009-08-12 13 views
1

Ich bin in der Lage, ein Sprite auf dem Bildschirm eines iPhone zu zeichnen, aber wenn ich versuche, es zu drehen, bekomme ich einige seltsame Ergebnisse. Es scheint das Sprite in der y-Richtung zu dehnen, je näher das Sprite der Y-Achse (90 und 270 Grad) kommt. Es wird korrekt angezeigt, wenn die Achsen x und -x (0 und 180 Grad) nach unten zeigen. Es ist im Grunde so, als würde es scheren statt rotieren. Hier sind die Grundlagen des Codes (Projektionsmatrix ist ortho):OpenGL ES glRotatef Scheren statt drehen?

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(); 

Kann jemand mir erklären, wie dieses Problem zu beheben, bitte?

Die halbe Größe ist nur die Hälfte der x und y Ausdehnung des Sprites; Das Entfernen des glScalef-Aufrufs macht keinen Unterschied.

Hier ist meine Matrix-Setup:

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

OK, hoffentlich wird dieser Screenshot zeigen, was passiert:

+0

könnten Sie Ihren glOrtho Anruf zeigen? Ich frage mich, ob das das beeinflussen könnte. –

+0

Was sind halfSize.x und halfSize.y? Tritt es immer noch auf, wenn Sie die glScalef-Zeile entfernen? – Goz

+0

Von hier sieht alles gut aus. Ich würde ein paar Screenshots posten. –

Antwort

3

Wenn Sie um den gleichen Betrag in x- und y-Richtung skalieren , dann verursacht deine Projektion die Verzerrung.

Nur eine Ahnung, aber vielleicht versuchen Sie, die 320 und 480 in Ihrer Ortho-Projektion zu tauschen. (Falls das X und Y auf dem iPhone vertauscht ist)

+0

Wow! Das war die Antwort, vielen Dank. Alles funktioniert jetzt! –

+0

Vergessen Sie nicht, seinen Beitrag AJ zu akzeptieren. – Goz

+0

würde ich, aber ich kann nicht sehen, wie man das im Moment macht. Vielleicht gibt es ein minimales Zeitlimit oder ich kann nicht, weil ich nicht registriert bin. Ich werde später noch einmal nachsehen. –