
GL_CLAMP_TO_EDGE您的纹理的
GL_TEXTURE_WRAP_S。
出现此问题的部分原因是纹理坐标 1.0 引用的位置超出了最后一个texel的中心。钳夹到边缘将使您的坐标沿该
S方向被钳夹到边缘纹理像素的中心。
对纹理进行采样时,如果坐标不指向确切的纹理像素中心,则过滤器模式和环绕行为将指示从何处获取纹理像素。默认情况下,OpenGL使用重复模式,因此,接近
1.0
的纹理坐标的最近邻居(最近的纹理像素中心)可能来自纹理的另一侧(重复)。对于普通图像,您甚至可能没有注意到这种行为,但是当您将其环绕在查找表的另一侧时,不连续性可能非常明显。
http://i.msdn.microsoft.com/dynimg/IC83860.gif
注意,纹理坐标 1.0 实际上是如何引用调色板条目 3 和 0 之间的边界的?
简短的版本是,如果您的范围是从 0.0 到 1.0,
则您的纹理坐标都没有参考texel中心,您可以轻松结束错误的texel采样。您需要调整坐标,以免每个调色板条目都使用纹理像素边界。
另外,由于您使用的GLSL≥130,因此可以
texelFetch(...)完全忽略所有这些归一化的纹理坐标。如果要使用其
a组件获取纹理的调色板条目,请尝试如下 *** 作:
gl_FragColor = texelFetch (palette, (int)(texture2D (texture, uv).a * 255.0), 0);
这将显式获取整数索引给定的纹理元素。您不必担心最近的邻居,包装模式,过滤等。
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)