修复glCopyTexSubImage2D颠倒纹理

时间:2009-04-27 12:45:06

标签: c++ opengl capture render textures

由于我已经开始学习渲染到纹理,所以我逐渐明白glCopyTexSubImage2D()将复制屏幕的指定部分。我尝试了几个简单的事情,以防止/解决这个问题,但找不到一个优雅的解决方案。

  • 在将纹理渲染到屏幕之前执行:: glScalef(1.0f,-1.0f,1.0f)有两个问题: 1,每次我使用纹理时都必须这样做。 2,我主要使用2D图形,并且为GL_BACKsides关闭了背面剔除。我希望尽可能地保存开关的功能。

  • 尝试将矩阵模式切换到GL_TEXTURE并在捕获时执行:: glScalef(1.0f,-1.0f,1.0f)转换,但结果是相同的。 (我猜测纹理矩阵只对glTexCoord调用产生影响?)

那么,如何修复使用glCopyTexSubImage2D

捕获的纹理的上下方向

3 个答案:

答案 0 :(得分:1)

您将使用纹理图像进行什么?实际上,尝试将它们颠倒过来通常比在其他地方移动代码需要更多的工作。

如果你试图在不导出图像的情况下使用图像,只需在你使用结果的地方翻转纹理坐标就是最有效的方法。

如果您尝试导出它,那么您要么在渲染后自己翻转它们。

在相关的说明中,如果您正在制作2D游戏,为什么要打开背面剔除?

答案 1 :(得分:0)

如果我的理解是正确的,那取决于你的起源。该函数似乎假设您的原点位于左下角,而大多数2D材料假设左上角的原点,这就是为什么它看起来是颠倒的。

我想您可以将原点更改为左下角,执行捕获,然后将原点更改回左上角并在执行交换之前再次渲染。但是这是一个可怕的解决方案,因为你有效地渲染了两次,但是如果你不打算每帧都这样做的话可能会很好。

答案 2 :(得分:-1)

使用glReadPixels()复制到缓冲区,翻转图像,然后使用 glTexImage2D()把它写回来。