修复glCopyTexSubImage2D颠倒纹理

问题描述 投票:0回答:3

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

  • 在将纹理渲染到屏幕之前执行:: glScalef(1.0f,-1.0f,1.0f)有两个问题:1,每次我使用纹理时都必须这样做。 2,我主要使用2D图形,并且为GL_BACKsides关闭了背面剔除。我希望尽可能地保持开关的保存。
  • 尝试将矩阵模式切换到GL_TEXTURE并在捕获时执行:: glScalef(1.0f,-1.0f,1.0f)转换,但结果是相同的。 (我猜测纹理矩阵只对glTexCoord调用产生影响?)

那么,我如何修复glCopyTexSubImage2D捕获的纹理的上下方向?

c++ opengl capture render textures
3个回答
1
投票

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

如果您尝试使用图像而不导出图像,只需在您使用结果的任何地方翻转纹理坐标都是最有效的方法。

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

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


0
投票

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

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


-1
投票

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

© www.soinside.com 2019 - 2024. All rights reserved.