为什么我的y坐标反向

时间:2009-12-22 18:27:03

标签: iphone opengl-es

所以我试图以横向模式呈现我的程序......但是我遇到了一些我无法理解的事情。为了向下移动我的地图,我必须有一个负偏移量。如果我保持当前正yOffset为100,则地图向下滚动而不是向上滚动。为什么是这样?我不高兴不得不把负y coords看到地图。有没有办法可以反转这个,所以当yOffset为正时,地图会向相反的方向滚动?

        float yOffset = 100;
    float xOffset = 0;
    glOrthof(0 - yOffset,
             320 - yOffset,
             480 + xOffset,
             0 + xOffset,
             -10000.0f,10000.0f);

    glMatrixMode(GL_MODELVIEW);
    glLoadIdentity();       
    glTranslatef(320.0f, 0.0f, 0.0f );
    glRotatef(90.0, 0.0, 0.0, 1.0);

    static const GLfloat squareVertices[] = {
    0.0f,  0.0f,
    1024.0f,  0.0f,
    0.0f,   1024.0f,
    1024.0f,   1024.0f
};



static const GLfloat texCoords[] = {
    0.0, 1.0,
    1.0, 1.0,
    0.0, 0.0,
    1.0, 0.0
};


glEnable(GL_BLEND);
glBlendFunc(GL_ONE, GL_ONE_MINUS_SRC_ALPHA);
glEnable(GL_TEXTURE_2D);
glEnableClientState(GL_TEXTURE_COORD_ARRAY);    

glTexCoordPointer(2, GL_FLOAT, 0, texCoords);   
glVertexPointer(2, GL_FLOAT, 0, squareVertices);        


glBindTexture(GL_TEXTURE_2D, mapTexture);
glDrawArrays(GL_TRIANGLE_STRIP, 0, 4);


glDisableClientState(GL_TEXTURE_COORD_ARRAY);
glDisable(GL_TEXTURE_2D);
glDisable(GL_BLEND);

4 个答案:

答案 0 :(得分:2)

您的Y坐标为负,因为您正在对320x480屏幕进行90度旋转,可能是因为您正在使用横​​向而非纵向进行游戏。矢量数学中的90度旋转可表示为:

(X,Y)变为(-Y,X)

当您将glOrtho()提供到X边界并将-yOffset提供到Y边界时,就会发生这种情况。{/ p>

至于纠正这个问题,我有其中一个“3D数学再次如何工作”的时刻,所以也许其中一个其他优秀的响应者会帮助你。

...

(我认为这个回复的旧版本不再正确,但可能会有所帮助):

两个想法:

您可能会对以下事实感到困惑:当您在OpenGL中转换矩阵时,您不会移动相机。你正在改变世界。要将相机向上移动,您实际上需要将世界向下移动。但是,这可能不是你的问题,这取决于你如何改变。

我注意到你在X周围旋转了90度。我忘记了哪一个,但这会将你的+ Z变成+ Y而+ Y变成-Z,或者它会将你的+ Z变成-Y和你的+ Y进入+ Z.这可能是轴反转的来源。你可以尝试旋转另一种方式(-90),或者你可以不旋转,并使用原生坐标方向。

答案 1 :(得分:1)

OpenGL uses a "right-handed" coordinate system。要切换y方向,您可以执行以下操作:

glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
glScalef (1.0f, -1.0f, 1.0f);
// multiply view transforms as usual... 
// multiply model transforms as usual...

答案 2 :(得分:0)

OpenGL反转y轴坐标,相对于UIKitCGxyz等) - 反之亦然,具体取决于您的观点。

答案 3 :(得分:0)

也许交换这些值:-10000.0f,10000.0f

相关问题