首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >GL_CLAMP在OpenGL中与GL_CLAMP_TO_EDGE有什么不同?

GL_CLAMP在OpenGL中与GL_CLAMP_TO_EDGE有什么不同?
EN

Stack Overflow用户
提问于 2019-06-30 07:22:05
回答 1查看 5.5K关注 0票数 1

根据您为glTexParameteri()引用的文档,纹理夹持有两种不同的解释。

微软的文档中,您可以找到GL_CLAMP,而在Khronos文件中,您可以找到GL_CLAMP

我认为它们在功能上是同义词,但似乎并非如此。

在我的Ubuntu18.04.2,我有以下内容。

代码语言:javascript
复制
/usr/include/GL/gl.h
#define GL_CLAMP_TO_EDGE                        0x812F
#define GL_CLAMP                                0x2900
#define GL_CLAMP_TO_BORDER                      0x812D

而在我的Windows 10 16299企业版上,我有以下内容。

代码语言:javascript
复制
C:\Program Files (x86)\Windows Kits\10\Include\10.0.16299.0\um\gl\GL.h
#define GL_CLAMP                          0x2900

它们被映射到不同的价值观,因此人们也会期望不同的行为。

我正在努力摆脱我们从使用GL_REPEAT获得的工件。请参阅下图中的绿色圆圈(图像源- freepik.com)。

GL_CLAMP确实消除了工件,但是我无法找到关于不同的夹紧模式是如何不同的足够的细节,以及什么时候人们会选择一个而不是另一个。

我正在windows机器上编码,以后可能会将相同的应用程序移植到GNU/Linux。

Update 1GL_CLAMP清除了大部分工件,但不是全部,最后我在所有纹理中添加了一个10 to透明边框。然而,问题仍然存在。

更新2:问题不是GL_CLAMP在实现之间有何不同,而是 GL_CLAMP与GL_CLAMP_TO_EDGE ?有何不同?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-07-01 19:26:55

如果您深入了解Khronos登记处不同的GL规范,您会发现一些解释。

在第一个规范(1.01994)中,CLAMPREPEATTEXTURE_WRAP_x参数的唯一选项。

规范1.21998增加了CLAMP_TO_EDGE。它给出了你需要的线索:

当使用该算法夹紧纹理坐标时,纹理采样滤波器跨越纹理图像的边缘,从纹理图像中提取一半的样本值,另一半从纹理边界获取。有时,不需要边框,也不用恒定的边框颜色,就可以夹紧纹理。 一种新的纹理夹紧算法,CLAMP_TO_EDGE,在所有mipmap级别上夹紧纹理坐标,这样纹理过滤器就不会对边框纹理进行采样。当夹持只从纹理图像边缘的纹理导出时返回的颜色。

CLAMP选项在规范3.02008中被废弃,而在规范3.2Core 2009中删除了。如果(也只有在)没有设置核心配置文件上下文的情况下,仍然可以使用它。

Microsoft采用旧CLAMP的原因是MS提供OpenGL 1.1,而不需要检索指向GL命令的函数指针。较高版本需要特殊的标题(除了gl.h)和其他特殊内容。

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

https://stackoverflow.com/questions/56823126

复制
相关文章

相似问题

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