如何将唯一的 alpha > 0 写入模板缓冲区?
How to write a only alpha > 0 to the stencil buffer?
我正在尝试将纹理渲染到模板缓冲区。我只需要 alpha > 0 的像素,但我的代码正在渲染四边形的每个像素——即使是 alpha 为 0 的像素。我怎样才能避免这种情况?
这是我的代码:
GL.StencilOp(StencilOp.Keep, StencilOp.Keep, StencilOp.Incr);
GL.ColorMask(false, false, false, false);
GL.DepthMask(false);
RenderMask(mask);
GL.StencilFunc(StencilFunction.Equal, 1, 0xFF);
GL.StencilOp(StencilOp.Keep, StencilOp.Keep, StencilOp.Keep);
GL.ColorMask(true, true, true, true);
GL.DepthMask(true);
使用 RenderDoc 进行调试时,我看到模板缓冲区在我的纹理所在的位置包含 1s...但它是一个矩形,它没有考虑 alpha。
这是我的片段着色器(它适用于正常渲染):
varying lowp vec4 vColor;
varying lowp vec2 vTexCoords;
uniform lowp sampler2D uTexture;
void main() {
gl_FragColor = texture2D(uTexture, vTexCoords) * vColor;
}
在着色器中使用 "discard" 语句删除您不想保留的片段。
varying lowp vec4 vColor;
varying lowp vec2 vTexCoords;
uniform lowp sampler2D uTexture;
void main() {
vec4 color = texture2D(uTexture, vTexCoords) * vColor;
if (color.a == 0.0) {
discard;
}
gl_FragColor = color;
}
我正在尝试将纹理渲染到模板缓冲区。我只需要 alpha > 0 的像素,但我的代码正在渲染四边形的每个像素——即使是 alpha 为 0 的像素。我怎样才能避免这种情况?
这是我的代码:
GL.StencilOp(StencilOp.Keep, StencilOp.Keep, StencilOp.Incr);
GL.ColorMask(false, false, false, false);
GL.DepthMask(false);
RenderMask(mask);
GL.StencilFunc(StencilFunction.Equal, 1, 0xFF);
GL.StencilOp(StencilOp.Keep, StencilOp.Keep, StencilOp.Keep);
GL.ColorMask(true, true, true, true);
GL.DepthMask(true);
使用 RenderDoc 进行调试时,我看到模板缓冲区在我的纹理所在的位置包含 1s...但它是一个矩形,它没有考虑 alpha。
这是我的片段着色器(它适用于正常渲染):
varying lowp vec4 vColor;
varying lowp vec2 vTexCoords;
uniform lowp sampler2D uTexture;
void main() {
gl_FragColor = texture2D(uTexture, vTexCoords) * vColor;
}
在着色器中使用 "discard" 语句删除您不想保留的片段。
varying lowp vec4 vColor;
varying lowp vec2 vTexCoords;
uniform lowp sampler2D uTexture;
void main() {
vec4 color = texture2D(uTexture, vTexCoords) * vColor;
if (color.a == 0.0) {
discard;
}
gl_FragColor = color;
}