好吧,我发现了问题,如果我不使用glFramebufferTexture2D,这个结果就像第三张图片那么。谁能告诉我为什么?
答案 0 :(得分:0)
嗯,openGL中的真坐标系工作,左边和底部都是-1,右边和顶部是1.接下来是渲染缓冲区原点也在“左下角”。那么当您向屏幕呈现图像时,您想要将Y坐标反转,以使顶部为-1或者更确切地说是0,但这仅适用于显示。
因为它适用于纹理,你不应该试图反转它,而是将原点保持在左下角部分。您必须明白,一旦绘制到纹理,这些像素就是RGBA像素数据,当纹理重复用于显示时(或者如果您读取这些像素),它们将从自然的角度看是倒置的。
我不确定这一切是否合乎逻辑,但你通常做的是反转场景,所以你看到的是正确的,但所有这些都与GPU上缓冲区的实际顺序无关。例如,如果您能够简单地替换缓冲区中第一个像素的RGBA数据,那么该像素实际上位于屏幕的左下角,而不是左上角。
因此,最好在处理FBO时保持openGL的顺序,并且仅在绘制到将显示在屏幕上的缓冲区时反转场景。