OpenGL ES 2.0坐标系

时间:2014-10-27 01:47:21

标签: opengl-es

我在iphone上使用opengl es 2.0渲染一个原语,我使用着色器和glFramebufferTexture2D渲染到纹理,但结果却不一样,我发现,我发现整个坐标都处于混乱状态,我给出的顶点数据是这个V0(-1,-1,-1)V1(0,-1,01),V2(-1,0,-1)我预期的结果应该是这样的第一个图像,但结果确实像第二个iamge案例。我发现整个坐标系就像这个绿色箭头一样,请告诉我这是怎么回事? first image

second image

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

third

1 个答案:

答案 0 :(得分:0)

嗯,openGL中的真坐标系工作,左边和底部都是-1,右边和顶部是1.接下来是渲染缓冲区原点也在“左下角”。那么当您向屏幕呈现图像时,您想要将Y坐标反转,以使顶部为-1或者更确切地说是0,但这仅适用于显示。

因为它适用于纹理,你不应该试图反转它,而是将原点保持在左下角部分。您必须明白,一旦绘制到纹理,这些像素就是RGBA像素数据,当纹理重复用于显示时(或者如果您读取这些像素),它们将从自然的角度看是倒置的。

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

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