0

自从我开始学习渲染到纹理后,我逐渐明白这glCopyTexSubImage2D()会将屏幕的指定部分倒置。我尝试了一些简单的事情来防止/解决这个问题,但找不到优雅的解决方案。

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

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

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

4

3 回答 3

1

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

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

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

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

于 2009-04-27T22:02:29.280 回答
0

如果我的理解是正确的,那取决于你的出身。该函数似乎假设您的原点位于左下角,而大多数 2D 东西都假设原点位于左上角,这就是它看起来颠倒的原因。

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

于 2009-04-27T21:51:21.913 回答
-1

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

于 2009-04-27T22:12:39.630 回答