Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/opengl/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
OpenGL-纹理图集“;弄脏;_Opengl_Texturing - Fatal编程技术网

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-您对它的解释是正确的,您在下面给出的答案很可能是发生了什么。非常感谢!