OpenGL ES glRotatef 执行剪切而不是旋转?

发布于 2024-07-30 15:08:44 字数 1143 浏览 3 评论 0原文

我可以在 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();

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

I am able to draw a sprite on the screen of an iPhone, but when I try to rotate it I am getting some weird results. It seems to be stretching the sprite in the y direction more the closer the sprite gets to pointing down the y-axis (90 and 270 degrees). It displays correctly when pointing down the x and -x axes (0 and 180 degrees). It is basically like it is shearing instead of rotating. Here are the essentials of the code (projection matrix is ortho):

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

Can anybody explain to me how to fix this please?

halfsize is just half the x and y extent of the sprite; removing the glScalef call does not make any difference.

Here is my matrix setup:

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

OK, hopefully this screenshot will demonstrate what's happening:

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

梦纸 2024-08-06 15:08:44

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

只是一种预感,但也许可以尝试在 Ortho 投影中交换 320 和 480。 (如果iPhone上的X和Y互换了)

If you are scaling by the same amount in the x and y directions, then your projection is causing the distortion.

Just a hunch, but maybe try swapping the 320 and 480 in your Ortho projection. (In case the X and Y on the iPhone is swapped)

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文