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:
könnten Sie Ihren glOrtho Anruf zeigen? Ich frage mich, ob das das beeinflussen könnte. –
Was sind halfSize.x und halfSize.y? Tritt es immer noch auf, wenn Sie die glScalef-Zeile entfernen? – Goz
Von hier sieht alles gut aus. Ich würde ein paar Screenshots posten. –