2009-12-22 118 views
1

所以我试图在横向模式下渲染我的程序......但是我遇到了一些麻烦的问题。为了在我的地图上下移,我必须有一个负偏移量。如果我保持当前正值yOffset为100,那么地图会向下滚动而不是向上滚动。为什么是这样?我不乐意把负面的y坐标看到地图。有什么办法可以扭转这种情况,所以当yOffset为正值时,地图会以相反的方向滚动?为什么我的y坐标反向

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

回答

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... 
+1

请不要切换你的y方向。只需使用调整后的坐标系。 – 2009-12-22 18:32:21

+0

我也不会推荐它 - 但它确实回答了他的问题。 – luke 2009-12-22 18:37:21

+1

如果你这样做,并且你面对背面剔除,一定要扭转你的多边形点的顺序。他们不是逆时针方向,而是顺时针方向。 – 2009-12-23 04:45:15

0

OpenGL的反转Y轴坐标,相对于UIKitCGxyz等) - 或反之亦然,这取决于你的观点。

0

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

2

你的y坐标是负的,因为你正在做的320x480的屏幕旋转90度,可能是因为你在横向和纵向不玩。在矢量数学旋转90度可表示为:

(X,Y)成为(-Y,X)

当您提供-yOffset进入X边界和+xOffset到这是发生在调用glOrtho() Y边界。

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

...

(老版本的响应,我不认为这是正确的了,但可能会有所帮助的):

两个想法:

您可能会被混淆事实是,当你在OpenGL中转换你的矩阵时,你不会移动相机。你在移动这个世界。要移动相机,实际上需要将世界向下移动。但是,这可能不是你的问题,取决于你如何改变。我注意到你旋转了90度左右的X.我忘记了哪一个,但是这会把你的+ Z变成+ Y和+ Y变成-Z,或者它会把你的+ Z变成-Y,你的+ Y到+ Z。这可能是您的轴反转的来源。您可以尝试以其他方式旋转(-90),或者您可以不旋转,并使用原生坐标方向。