有没有办法在GLES 2中使用着色器隐藏重叠像素?我正在使用以下顶点和片段着色器。
attribute vec4 a_position;
attribute vec4 a_color;
attribute vec2 a_texCoord0;
uniform mat4 u_projTrans;
varying vec4 v_color;
varying vec2 v_texCoords;
void main (void)
{
v_color = a_color;
v_texCoords = a_texCoord0;
gl_Position = u_projTrans * a_position;
}
#ifdef GL_ES
#define LOWP lowp
precision mediump float;
#else
#define LOWP
#endif
varying vec2 v_texCoords;
uniform sampler2D u_texture;
void main (void)
{
gl_FragColor = texture2D(u_texture, v_texCoords);
}
我希望能够做的是检查位置是否有填充像素。如果是,则跳过纹理的其他位置。有没有办法实现这个目标?
答案 0 :(得分:0)
好的,我已经考虑过了,我想你可以使用Stencil一次性完成。 我自己从来没有这样做过,所以我不确定但是它可以工作。
您需要将模板操作设置为:
glStencilOp(GL_KEEP, GL_KEEP, GL_ZERO)
如果深度和模板测试已经过去,这将使模板测试为零像素中的模板值,并且如果没有做任何事情,则不执行任何操作。
模板功能:
glStencilFunc(GL_EQUAL, 1, 0xFFFFFFFF);
如果模板值为1,这将使模板测试通过。
在渲染网格/场景之前,需要清除模板缓冲区并将其所有像素设置为0x00000001的值。 这将导致每次渲染一个像素时,它将测试该像素中的模板值是否为1.如果它确实是1,它将渲染像素并将模板值归零。 下次尝试将像素绘制到同一个位置时,模板值将为0并且模板测试将失败,因此您的像素将不会被绘制。
这是我能想到的一种解决方法。
希望这会对你有所帮助。