- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在使用 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/
我是一名优秀的程序员,十分优秀!