首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >OpenGL -纹理地图集“污点”

OpenGL -纹理地图集“污点”
EN

Stack Overflow用户
提问于 2011-08-04 17:11:16
回答 1查看 985关注 0票数 2

我正在使用一个纹理地图集,我有一个由拼接两个相同大小的图像并排。当我修改纹理协调时,我按照以下顺序进行操作:

  1. if(texCoordx>1) texCoordx = texCoordx % 1 -因此一种纹理不会泄漏到another.
  2. if(texCoordx<0) texCoordx = 1 + texCoordx中,因此一种纹理不会泄漏到另一种纹理中。
  3. 将纹理的坐标缩放为0.5。如果想在右边绘制纹理,则
  4. 添加0.5。

但是,我似乎在纹理协调方法1和0的边缘得到了“污点”。它看起来像是沿着t轴被弄脏了。我附了一张截图。

我知道有一个答案找到了here,但它只稍微缩小了污点。我使用我自己的着色器,但它没有做任何修改纹理协调。我还启用了GL_REPEAT。有没有人知道可能的原因/解决方案?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2011-08-04 17:46:42

如果我正确地解释了你的图片,这个纹理是地图集中的两个纹理之一(假设左边),而原始的texCoords (从左到右)是类似的

代码语言:javascript
代码运行次数:0
运行
复制
0.2, 0.4, 0.6, 0.8, 1, 1.2, 1.4, 1.6, 1.8, 2

在步骤1中完成您自己的包装之后,您现在得到了以下内容

代码语言:javascript
代码运行次数:0
运行
复制
0.2, 0.4, 0.6, 0.8, 1, 0.2, 0.4, 0.6, 0.8, 1

,后来变成了

代码语言:javascript
代码运行次数:0
运行
复制
0.1, 0.2, 0.3, 0.4, 0.5, 0.1, 0.2, 0.3, 0.4, 0.5

这里我们看到的问题在0.5,0.1,其中单调性变化。OpenGL不知道你想向左转0.5到0.1。它只取-0.4的差值,从而从右到左向后插入到纹理的开头(因此,在这个小区间内向后发出吱吱声,所以沿着t轴,它实际上是正确的)。这是因为,OpenGL不知道您的纹理包装在纹理的中间,因为它在概念上只看到一个大纹理,而不是一个小纹理图集,而GL_REPEAT包装模式只在大纹理的边缘工作。

在访问纹理之前,您必须在片段着色器中完成包装(前两个步骤)。因此,您的纹理坐标都是单调的,并且得到了正确的插值。然后,在片段中,您可以安全地包装纹理坐标。实际上,您可以在片段着色器中完成所有步骤。只要给它一个均匀的偏移内的地图集(选择实际的子纹理)。然后在访问纹理之前进行包装、缩放和添加偏移量。

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

https://stackoverflow.com/questions/6945655

复制
相关文章

相似问题

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