我似乎找不出我的问题,在模板缓冲区的对象概述algo。
function init() {
...
gl.enable(gl.STENCIL_TEST);
gl.stencilOp(gl.KEEP, gl.KEEP, gl.REPLACE);
...
}
var mscaled = []; // scaled model matrix of a cube
function render() {
gl.clear(gl.COLOR_BUFFER_BIT | gl.DEPTH_BUFFER_BIT | gl.STENCIL_BUFFER_BIT);
gl.stencilFunc(gl.ALWAYS, 1, 0xFF);
gl.stencilMask(0xFF);
// use program1
// set attrib pointers
// bind cube's ebo buffer
gl.drawElements(gl.TRIANGLES, 36, gl.UNSIGNED_SHORT, 0);
gl.stencilFunc(gl.NOTEQUAL, 1, 0xFF);
gl.stencilMask(0x00);
// set scaled model matrix
mat4.fromRotationTranslationScale(mscaled, cube.rotation, cube.translation, vec3.fromValues(1.1, 1.1, 1.1));
// use program2
// set attrib pointers
// bind cube's ebo buffer
gl.drawElements(gl.TRIANGLES, 36, gl.UNSIGNED_SHORT, 0);
}
它只是把整个第二个立方体画在第一个立方体上面,就像没有模板测试一样。我测试过高等级和低档次。
红色立方体应该是出口线。在第一个图像中,它被缩放--但是WebGL只在第一个图像的上面绘制,在第二个图像中,它被缩小--理想情况下,它甚至不应该因为模板测试而被绘制(当然,在第二个图像中,深度测试是禁用的)。
发布于 2016-08-22 03:46:27
在创建上下文时,我传递了WebGLContextAttributes对象,显式请求模具缓冲区:
canvas.getContext('webgl', {stencil: true});
https://gamedev.stackexchange.com/questions/128694
复制相似问题