webgl绘图顺序、模具缓冲区

webgl绘图顺序、模具缓冲区,webgl,stencil-buffer,Webgl,Stencil Buffer,我正在阅读learningwebgl.com,让我困惑的是,它绘制了作为最后一个元素绑定的第一个缓冲区 我希望只看到蓝色的方块,因为其他的东西都透支了,输出的顺序似乎是相反的 我也读过有关模具缓冲区的内容,所以我尝试创建一个遮罩(红色),然后在蓝色正方形上应该有一个绿色三角形 面具可以用,但我不知道它是对的还是我只是幸运 非常感谢您的帮助。之所以这样做,是因为您在第203行启用了深度缓冲区 gl.enable(gl.DEPTH_TEST); 深度缓冲区保存绘制的每个像素的深度。在默认模式下,

我正在阅读learningwebgl.com,让我困惑的是,它绘制了作为最后一个元素绑定的第一个缓冲区

我希望只看到蓝色的方块,因为其他的东西都透支了,输出的顺序似乎是相反的

我也读过有关模具缓冲区的内容,所以我尝试创建一个遮罩(红色),然后在蓝色正方形上应该有一个绿色三角形

面具可以用,但我不知道它是对的还是我只是幸运


非常感谢您的帮助。

之所以这样做,是因为您在第203行启用了深度缓冲区

gl.enable(gl.DEPTH_TEST);
深度缓冲区保存绘制的每个像素的深度。在默认模式下,当尝试绘制像素时,WebGL将检查已经存在的像素的深度,只有当新像素的深度小于时,才会绘制上一个像素的新像素

由于所有形状的深度均为0.0,因此第一个形状将用0.0填充这些像素的深度缓冲区。您绘制的下一个形状的每个像素的深度也为0.0,不小于0.0,因此这些像素不会被覆盖

如果您注释掉启用深度测试的行,您将得到预期的结果


注意,启用深度测试后,您可以通过调用函数
gl.depthFunc
()

来设置WebGL用于决定是否绘制像素的比较,因为您在第203行启用了深度缓冲区

gl.enable(gl.DEPTH_TEST);
深度缓冲区保存绘制的每个像素的深度。在默认模式下,当尝试绘制像素时,WebGL将检查已经存在的像素的深度,只有当新像素的深度小于时,才会绘制上一个像素的新像素

由于所有形状的深度均为0.0,因此第一个形状将用0.0填充这些像素的深度缓冲区。您绘制的下一个形状的每个像素的深度也为0.0,不小于0.0,因此这些像素不会被覆盖

如果您注释掉启用深度测试的行,您将得到预期的结果


注意,启用深度测试后,您可以通过调用函数
gl.depthFunc
()

设置WebGL用于决定是否绘制像素的比较。是否可以将模具部分拆分为单独的问题?是否可以将模具部分拆分为单独的问题?