Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/iphone/35.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Iphone 为什么我的y坐标是相反的_Iphone_Opengl Es - Fatal编程技术网

Iphone 为什么我的y坐标是相反的

Iphone 为什么我的y坐标是相反的,iphone,opengl-es,Iphone,Opengl Es,所以我尝试在横向模式下渲染我的程序。。。然而,我遇到了一些事情,我很难把我的思想包围起来。为了在地图上向下移动,我必须有一个负偏移。如果我将当前的正yOffset保持为100,则贴图将向下滚动,而不是向上滚动。为什么会这样?我不喜欢用负y坐标看地图。有没有一种方法可以反转,这样当yOffset为正值时,地图会朝相反的方向滚动 float yOffset = 100; float xOffset = 0; glOrthof(0 - yOffset,

所以我尝试在横向模式下渲染我的程序。。。然而,我遇到了一些事情,我很难把我的思想包围起来。为了在地图上向下移动,我必须有一个负偏移。如果我将当前的正yOffset保持为100,则贴图将向下滚动,而不是向上滚动。为什么会这样?我不喜欢用负y坐标看地图。有没有一种方法可以反转,这样当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方向。只要使用调整后的坐标系就行了。我也不推荐使用它——但它确实回答了他的问题。如果您这样做,并且您正在进行背面剔除,请确保反转多边形点的顺序。如果你不想反转多边形点,另一个选择是使用正面消隐而不是背面消隐。对我来说,这感觉有点像黑客,因为你是说后面实际上是前面。但所有的图形编程都有一定程度的欺骗作用就写一些好的评论吧。