繁体   English   中英

在opengl es片段着色器中,如何将纹理移动一些像素值?

[英]In opengl es fragment shader, how to shift texture by some pixel values?

我当前正在使用多个纹理进行渲染。 所有纹理都传递到同一片段着色器进行处理。 纹理之一需要移动一些像素值。 如何在片段着色器代码中实现这一点?

我尝试了texture2D(tex,texCoord.xy + vec2(shiftx,0.0)),其中shiftx小于1浮点值。 这不能正常工作。 理想情况下,纹理移开的区域应为空白,但着色器使用最后的像素颜色填充该区域。 如果可以清除此区域,则可能是一种方法。 但是还有其他解决方案吗?

谢谢!

否。图元定义了绘图区域,因此,如果在单个着色器中使用多个纹理是不可能的(如果仅使用1个纹理,则偏移图元)。 因此,您需要做的是检查坐标,如果值超出范围(小于零或大于一个,则大于一个),则执行单独的逻辑,如不包括那里的纹理。

一些源代码可能有助于建议您适当的解决方案。

此处仅需注意,在顶点着色器中进行坐标平移通常是有意义的。 然后,您需要使用其他变化的坐标,例如varying lowp vec2 offsetedTexCoord

有多种方法可以解决此问题。 最简单的方法是检查其中一种包装类型是否可以满足您的需要。 该像素用纯色填充,而不是您说引起麻烦的最后一个像素。

glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_BORDER);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_BORDER);

如果自动换行没有达到预期的效果,您已经知道转换的截止点在哪里。 因此,丢弃片段或将其设置为所需的任何颜色。

if (texCoord.x < shiftx) discard;

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM