1

iPhoneの画面にスプライトを描くことはできますが、回転させようとすると奇妙な結果になります。スプライトがy軸(90度と270度)を下向きに近づけるほど、スプライトがy方向に伸びているように見えます。x軸と-x軸(0度と180度)を下に向けると正しく表示されます。基本的には回転ではなくせん断のようなものです。コードの要点は次のとおりです(射影行列はオルソです)。

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、うまくいけば、このスクリーンショットは何が起こっているのかを示しています:

4

1 に答える 1

3

x方向とy方向に同じ量だけスケーリングしている場合は、投影によって歪みが発生しています。

ただの予感ですが、正投影で320と480を交換してみてください。(iPhoneのXとYが入れ替わった場合)

于 2009-08-13T03:24:42.973 に答える