【问题标题】:Clipping a sampler2D in shader在着色器中裁剪 sampler2D
【发布时间】:2016-05-21 15:29:16
【问题描述】:

在返回 texture2D 之前,我试图在着色器中从加载的 sampler2D 纹理中剪裁或剪切左侧。

目前我在传递给着色器之前进行纹理编辑,但这会发生多次,这会影响性能。可以在着色器中进行纹理编辑吗?

我先传递纹理:

gl.texImage2D(gl.TEXTURE_2D, 0, gl.RGBA, gl.RGBA, gl.UNSIGNED_BYTE, canvas);

然后在着色器中将其用作制服.. 我会在片段着色器或顶点着色器中剪辑它吗?

【问题讨论】:

  • 如果我理解正确你的问题,你不能通过调整用于采样的纹理坐标来对你想要使用的纹理部分进行采样吗?

标签: webgl shader fragment-shader vertex-shader


【解决方案1】:

clip the texture 是什么意思。你不剪辑纹理。你从纹理中读取数据并决定你想用这些数据做什么。示例

// don't draw anything if the texture coords reference the right half
// of the texture.
if (someTexCoords.x > 0.5) {
   discard;
}
gl_FragCoord = texture2D(someSampler, someTexCoords);

或者

// Draw red if texture coords access the right half of the texture
vec4 texColor = texture2D(someSampler, someTexCoords);
gl_FragCoord = mix(texColor, vec4(1,0,0,1), step(0.5, someTexCoords.x));

等等。

【讨论】:

  • 非常感谢您!通过根据坐标进行丢弃,这完全实现了我所需要的。几天来,我一直在敲击键盘,试图弄清楚这一点!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-12-29
  • 1970-01-01
  • 2017-08-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多