gpt4 book ai didi

c++ - 使用影响 TEXTURE_2D 的 TEXTURE_RECTANGLE_ARB

转载 作者:行者123 更新时间:2023-11-30 04:33:26 25 4
gpt4 key购买 nike

我正在使用 OpenGL 1.3 进行 2D Sprite 渲染,并分别使用 TEXTURE_2D 和 TEXTURE_RECTANGLE_ARB 支持 POTS(二次方)纹理和 NPOTS(非二次方)纹理。

我从 POTS 纹理开始(使用 TEXTURE_2D),效果很好,但现在我要添加 NPOTS 纹理(使用 TEXTURE_RECTANGLE_ARB)。此添加导致 POTS 纹理(带有 TEXTURE_2D)损坏。

我所说的中断是指将 POTS 纹理渲染为从左下角的灰色到右上角的白色的灰度渐变。

额外的一点(在尝试修复此错误时发现)- TEXTURE_RECTANGLE_ARB 和 TEXTURE_2D 之间的一大区别是前者在纹理上使用非标准化坐标,而 TEXTURE_2D 使用标准化坐标 ([0.0,1.0])。我决定检查并用非标准化坐标替换 TEXTURE_2D 的标准化坐标,这通过创建另一个消除了灰度问题 - 它渲染了错误的纹理!

即使用 POTS 和 NPOTS 纹理时,我的 POTS 纹理会尝试渲染 NPOTS 纹理。

有谁知道为什么会发生这种情况?谢谢!

最佳答案

好吧,事实证明这是一个相当愚蠢的错误,它是在原始 TEXTURE_2D 代码中发现的。我忘了用正确的 glDisable 结束渲染!

即渲染代码以 glEnable(targetType) 开始,但没有以 glDisable(targetType) 结束 [其中 targetType 是 GL_TEXTURE_2D 或 GL_TEXTURE_RECTANGLE_ARB 的正确选择]。

我想,不知何故,这两个渲染环境交织在一起。

类(class) - 确保以 glEnable 开始时以 glDisable 结束。

编辑:考虑到下面的评论,我做了一些挖掘,发现了目标总统。这个想法在本文的开头提出:

http://math.hws.edu/graphicsnotes/c4/s5.html

“渲染表面时最多会使用一个纹理目标。如果启用多个目标,则 3D 纹理优先于 2D 纹理,而 2D 纹理优先于 1D。除了本节后面的一个示例,我们将仅适用于 2D 纹理。”

就 TEXTURE_RECTANGLE_ARBs 优先级而言,这在第 10 节的规范中进行了描述:http://www.opengl.org/registry/specs/ARB/texture_rectangle.txt

在出现错误时我不知道目标优先级或优先级,所以感谢@datenwolf!

关于c++ - 使用影响 TEXTURE_2D 的 TEXTURE_RECTANGLE_ARB,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6873980/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com