iPhoneの画面にスプライトを描くことができますが、回転させようとすると奇妙な結果が出ます。スプライトがy軸(90度と270度)を指すように近づくほど、スプライトがy方向に伸びているようです。 x軸と-x軸(0度と180度)を指すと正しく表示されます。それは基本的に回転の代わりにせん断であるのと同じです。コードの本質は次のとおりです(投影行列はオルソです)。OpenGL ES glRotatefは、回転の代わりにせん断を実行しますか?
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();
誰でも私にこの問題を解決する方法を教えてもらえますか?
halfsizeは、スプライトのxとyの範囲のちょうど半分です。 glScalef呼び出しを削除しても差は生じません。
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
glOrthof(0, 320, 480, 0, 0.01, 5);
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
OK、うまくいけば、このスクリーンショットは、何が起こっているのかを説明します:ここで
は私の行列のセットアップで
あなたのglOrthoコールを表示できますか?それがそれに影響を与えるかどうかは疑問だ。 –
halfSize.xとhalfSize.yは何ですか?あなたがglScalef行を削除してもまだ起こりますか? – Goz
ここからすべてがよく見えます。私はいくつかのスクリーンショットを投稿します。 –