所以我试图以横向模式呈现我的程序......但是我遇到了一些我无法理解的事情。为了向下移动我的地图,我必须有一个负偏移量。如果我保持当前正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);
答案 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轴坐标,相对于UIKit
(CGxyz
等) - 反之亦然,具体取决于您的观点。
答案 3 :(得分:0)
也许交换这些值:-10000.0f,10000.0f