OpenGL-纹理图集“;弄脏;
我使用的纹理图集,我有一个由两个相同大小的图像拼接在一起并排制作。 修改纹理坐标时,我按以下顺序执行操作:OpenGL-纹理图集“;弄脏;,opengl,texturing,Opengl,Texturing,我使用的纹理图集,我有一个由两个相同大小的图像拼接在一起并排制作。 修改纹理坐标时,我按以下顺序执行操作: 如果(texCoordx>1)texCoordx=texCoordx%1-这样一种纹理就不会泄漏到另一种纹理中 if(texCoordx如果我正确地解释了你的图片,这个纹理是atlas中两个纹理(假设左侧)之一,而你原来的texCoords(从左到右)类似 0.2, 0.4, 0.6, 0.8, 1, 1.2, 1.4, 1.6, 1.8, 2 0.2, 0.4, 0.6, 0.8, 1
如果(texCoordx>1)texCoordx=texCoordx%1
-这样一种纹理就不会泄漏到另一种纹理中if(texCoordx如果我正确地解释了你的图片,这个纹理是atlas中两个纹理(假设左侧)之一,而你原来的texCoords(从左到右)类似
0.2, 0.4, 0.6, 0.8, 1, 1.2, 1.4, 1.6, 1.8, 2
0.2, 0.4, 0.6, 0.8, 1, 0.2, 0.4, 0.6, 0.8, 1
在步骤1中完成自己的包装后,您现在可以得到如下内容
0.2, 0.4, 0.6, 0.8, 1, 1.2, 1.4, 1.6, 1.8, 2
0.2, 0.4, 0.6, 0.8, 1, 0.2, 0.4, 0.6, 0.8, 1
,后来成为
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\u REPEAT
换行模式仅在大纹理的边缘工作
您必须进行包装(前两步)在访问纹理之前在片段着色器中。因此,你的纹理坐标都是单调的并正确插值。然后在片段处,你可以安全地包裹纹理坐标。实际上,你可以在片段着色器中执行所有步骤。只需为图集内的偏移量(选择实际的子纹理)提供一个统一的值即可。然后在访问纹理之前进行包装、缩放并添加偏移量。在哪里执行1和2?是在着色器中还是在程序中?我应该如何解释图片?这是atlas纹理之一吗?以及从左到右的原始纹理坐标是什么(似乎只有s相关)?可能类似于(0、1、2)经过4步转换后,texCoords是什么?@neodelphi-我正在我的程序中执行它,着色器不会修改纹理坐标Christian-您对它的解释是正确的,您在下面给出的答案很可能是发生了什么。非常感谢!