首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >影响TEXTURE_2D的TEXTURE_RECTANGLE_ARB的使用

影响TEXTURE_2D的TEXTURE_RECTANGLE_ARB的使用
EN

Stack Overflow用户
提问于 2011-07-29 21:35:39
回答 2查看 187关注 0票数 1

我使用OpenGL 1.3来做2D精灵渲染,并分别用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.01.0)。我决定检查并用非标准化坐标替换texture _2D的标准化坐标,这通过创建另一个解决了灰度问题-它渲染了错误的纹理!

例如,当使用POTS和NPOTS纹理时,我的POTS纹理尝试渲染NPOTS纹理。

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

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-07-29 22:17:33

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

也就是说,呈现代码以glEnable( targetType )开始,但不以glDisable(targetType)结束,其中targetType是GL_TEXTURE_2D或GL_TEXTURE_RECTANGLE_ARB的正确选择。

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

课程-确保以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中进行了描述

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

票数 1
EN

Stack Overflow用户

发布于 2011-07-30 05:08:50

即使你已经解决了你的问题,我也想澄清一个概念,这个概念可能会解决你在不久的将来可能遇到的问题。

以下是问题所在:

现在我正在添加

纹理(使用TEXTURE_RECTANGLE_ARB)

GL_texture_rectangle OpenGL扩展并不意味着支持非二次幂(NPOT)纹理;要查询的正确OpenGL扩展是GL_texture_non_power_of_two。

GL_texture_non_power_of_two不能破坏期望二次幂(POT)纹理的现有应用程序,因为它放宽了规范,以便接受具有任何宽度/高度/深度(当然,在限制范围内)的纹理。下面是对扩展的引用:

除了导出扩展字符串的实现将允许应用程序传入可能是或可能不是2的幂的1D、2D、立方体贴图和3D目标的纹理维度之外,此扩展没有引入额外的程序或枚举api。

相反,GL_texture_rectangle允许您通过像素坐标对纹理范围(宽度和高度)进行寻址来指定纹理坐标,像素坐标是一个整数(而不是通常在0.0f、1.0f范围内规格化的浮点坐标)。此外,矩形纹理不支持mipmapping。

此外,如果您阅读GL_texture_rectangle规范,它并不意味着支持NPOT纹理,因为矩形纹理将受到2D纹理的相同限制的影响。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6873980

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档