Opengl es OpenGL ES 2.0坐标系

Opengl es OpenGL ES 2.0坐标系,opengl-es,Opengl Es,我在iphone上使用opengl es 2.0渲染一个基本体,我使用着色器和glFramebufferTexture2D渲染到纹理,但结果不一样,我预计,我发现整个坐标都很混乱,我给出的顶点数据是这个V0-1,-1 V1 0,-1,01,V2-1,0,-1我预计的结果应该是第一个这样的图像,但结果确实与第二个iamge案例类似。我发现整个坐标系就像这个绿色箭头沿着折叠一样,请告诉我这是怎么回事? 好的,我发现了问题,如果我不使用glFramebufferTexture2D,这个结果就像第三张

我在iphone上使用opengl es 2.0渲染一个基本体,我使用着色器和glFramebufferTexture2D渲染到纹理,但结果不一样,我预计,我发现整个坐标都很混乱,我给出的顶点数据是这个V0-1,-1 V1 0,-1,01,V2-1,0,-1我预计的结果应该是第一个这样的图像,但结果确实与第二个iamge案例类似。我发现整个坐标系就像这个绿色箭头沿着折叠一样,请告诉我这是怎么回事?

好的,我发现了问题,如果我不使用glFramebufferTexture2D,这个结果就像第三张图片一样正确。那么谁能告诉我为什么


好的,openGL中的真实坐标系是这样工作的:左和下是-1,右和上是1。接下来,渲染缓冲区原点也位于左下角。因此,当您将图像呈现给屏幕时,您希望Y坐标倒置,使顶部处于-1,或者更确切地说,处于0,但这仅用于显示

对于纹理,您不应该尝试反转它,而是将原点保持在左下角。您必须了解,一旦绘制到纹理,这些像素就是简单的RGBA像素数据,当纹理重新用于显示或读取这些像素时,它们将从自然角度倒置

我不确定所有这些都是合乎逻辑的,但你通常做的是反转场景,这样你看到的是正确的,但所有这些都与GPU上缓冲区的实际顺序无关。例如,如果您能够简单地替换缓冲区中第一个像素的RGBA数据,那么该像素实际上将位于屏幕的左下角,而不是左上角


因此,在处理FBO时,最好保持openGL的顺序,并且仅在绘制到将显示到屏幕上的缓冲区时才反转场景。

现在的问题是,如果我直接渲染,并且我期望得到相同的结果,如果我渲染到纹理,则glFramebufferTexture2D和外观位置与我预期的不同。