Iphone 为什么我的y坐标是相反的
所以我尝试在横向模式下渲染我的程序。。。然而,我遇到了一些事情,我很难把我的思想包围起来。为了在地图上向下移动,我必须有一个负偏移。如果我将当前的正yOffset保持为100,则贴图将向下滚动,而不是向上滚动。为什么会这样?我不喜欢用负y坐标看地图。有没有一种方法可以反转,这样当yOffset为正值时,地图会朝相反的方向滚动Iphone 为什么我的y坐标是相反的,iphone,opengl-es,Iphone,Opengl Es,所以我尝试在横向模式下渲染我的程序。。。然而,我遇到了一些事情,我很难把我的思想包围起来。为了在地图上向下移动,我必须有一个负偏移。如果我将当前的正yOffset保持为100,则贴图将向下滚动,而不是向上滚动。为什么会这样?我不喜欢用负y坐标看地图。有没有一种方法可以反转,这样当yOffset为正值时,地图会朝相反的方向滚动 float yOffset = 100; float xOffset = 0; glOrthof(0 - 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);
。要切换y方向,可以执行以下操作:
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
glScalef (1.0f, -1.0f, 1.0f);
// multiply view transforms as usual...
// multiply model transforms as usual...
OpenGL反转y轴坐标,相对于
UIKit
(CGxyz
等),或者相反,这取决于您的视角。可以交换这些值:-10000.0f,10000.0f您的y坐标为负值,因为您正在对320x480屏幕进行90度旋转,可能是因为你在玩风景画而不是肖像画。矢量数学中的90度旋转可以表示为:
(X,Y)变成(-Y,X)
当您将-yOffset
提供给X边界和+xOffset
提供给Y边界时,对glOrtho()
的调用就会发生这种情况
至于纠正这一点,我有一个“3D数学如何再次工作”的时刻,所以也许其他优秀的回答者会帮助你
(我认为这一回答的旧版本不再正确,但可能会有所帮助):
两个想法:
您可能会被这样一个事实弄糊涂,即在OpenGL中变换矩阵时,您没有移动相机。你正在改变世界。要向上移动摄影机,实际上需要向下移动世界。但是,这可能不是你的问题,取决于你如何转变
我注意到你正绕X旋转90度。我忘了是哪个,但这要么会把+Z变成+Y,+Y变成-Z,要么会把+Z变成-Y,+Y变成+Z。这可能是你轴反转的原因。您可以尝试以另一种方式旋转(-90),也可以不旋转,使用本机坐标方向。请不要切换y方向。只要使用调整后的坐标系就行了。我也不推荐使用它——但它确实回答了他的问题。如果您这样做,并且您正在进行背面剔除,请确保反转多边形点的顺序。如果你不想反转多边形点,另一个选择是使用正面消隐而不是背面消隐。对我来说,这感觉有点像黑客,因为你是说后面实际上是前面。但所有的图形编程都有一定程度的欺骗作用就写一些好的评论吧。