【发布时间】:2019-06-30 07:22:05
【问题描述】:
根据您为glTexParameteri() 引用的文档,对纹理的钳制有两种不同的解释。
在Microsoft's documentation,您会找到GL_CLAMP,而在Khronos's documentation,您会找到GL_CLAMP_TO_EDGE。
我认为它们在功能上是同义词,但事实并非如此。
在我的 Ubuntu 18.04.2 上,我有以下内容。
/usr/include/GL/gl.h
#define GL_CLAMP_TO_EDGE 0x812F
#define GL_CLAMP 0x2900
#define GL_CLAMP_TO_BORDER 0x812D
而在我的 Windows 10 16299 Enterprise 版本中,我有以下内容。
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。
更新 1 :GL_CLAMP 消除了大多数伪像,但不是全部,最后我为我的所有纹理添加了一个 10 像素的透明边框。然而问题仍然存在。
更新 2:问题不在于 GL_CLAMP 在实现之间有何不同,而是GL_CLAMP 与 GL_CLAMP_TO_EDGE 有何不同?
【问题讨论】:
标签: windows opengl textures rendering