1

我可以在 iPhone 的屏幕上绘制一个精灵,但是当我尝试旋转它时,我得到了一些奇怪的结果。它似乎在 y 方向上拉伸精灵越多,精灵越接近指向 y 轴(90 度和 270 度)。当指向 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();

好的,希望这个屏幕截图能展示正在发生的事情:

4

1 回答 1

3

如果您在 x 和 y 方向上缩放相同的量,则您的投影会导致失真。

只是一个预感,但也许尝试在您的正交投影中交换 320 和 480。(如果 iPhone 上的 X 和 Y 互换)

于 2009-08-13T03:24:42.973 回答