Javascript 多个gl.DrainElements调用无法正常工作
我有以下功能,可以使用Mini Cooper绘制场景,它使用for循环分别渲染汽车的每个部分Javascript 多个gl.DrainElements调用无法正常工作,javascript,webgl,Javascript,Webgl,我有以下功能,可以使用Mini Cooper绘制场景,它使用for循环分别渲染汽车的每个部分 function drawScene() { var colormap = new Object(); colormap["Body"] = [0.05, 0.05, 0.54]; colormap["Body Chrome"] = [0.95, 0.96, 0.93]; colormap["Roof"]=[0.85, 0.85, 0.85]; colormap[
function drawScene() {
var colormap = new Object();
colormap["Body"] = [0.05, 0.05, 0.54];
colormap["Body Chrome"] = [0.95, 0.96, 0.93];
colormap["Roof"]=[0.85, 0.85, 0.85];
colormap["Headlights"]=[0.95, 0.96, 0.93];
colormap["Mirrors"]=[0.85, 0.85, 0.85];
colormap["Brakelights"]=[0.54, 0.22, 0.22];
colormap["Undercarriage"]=[0.2, 0.2, 0.2];
colormap["Antenna"]=[0.2, 0.2, 0.2];
colormap["Driver Blinker"]=[0.9, 0.5, 0.1];
colormap["Passenger Blinker"]=[0.9, 0.5, 0.1];
colormap["Exhaust"]=[0.95, 0.96, 0.93];
colormap["Upper Driver Wiper"]=[0.2, 0.2, 0.2];
colormap["Upper Passenger Wiper"]=[0.2, 0.2, 0.2];
colormap["Lower Driver Wiper"]=[0.2, 0.2, 0.2];
colormap["Lower Passenger Wiper"]=[0.2, 0.2, 0.2]
colormap["Rear Wiper"]=[0.2, 0.2, 0.2];
colormap["Vents"]=[0.1, 0.1, 0.1];
colormap["License"]=[0.94, 0.64, 0.19];
colormap["Front Driver Rim"]=[0.75, 0.75, 0.75];
colormap["Front Passenger Rim"]=[0.75, 0.75, 0.75];
colormap["Rear Driver Rim"]=[0.75, 0.75, 0.75];
colormap["Rear Passenger Rim"]=[0.75, 0.75, 0.75];
colormap["Front Driver Tire"]=[0.1, 0.1, 0.1];
colormap["Front Passenger Tire"]=[0.1, 0.1, 0.1];
colormap["Rear Driver Tire"]=[0.1, 0.1, 0.1];
colormap["Rear Passenger Tire"]=[0.1, 0.1, 0.1];
colormap["Brakes"]=[0.75, 0.75, 0.75];
colormap["Rear View Mirror"]=[0.8, 0.8, 0.8];
colormap["Interior"]=[0.4, 0.4, 0.0];
colormap["Driver"]=[0.9, 0.9, 0.9];
colormap["Chair"]=[0.55, 0.27, 0.075];
colormap["Windows"]=[0.5, 0.5, 0.5];
gl.viewport(0, 0, gl.viewportWidth, gl.viewportHeight);
gl.clear(gl.COLOR_BUFFER_BIT | gl.DEPTH_BUFFER_BIT);
gl.bindBuffer(gl.ARRAY_BUFFER, miniVertexBuffer);
gl.vertexAttribPointer(shaderProgram.vertexPositionAttribute, 3, gl.FLOAT, false, 4*8, 0);
setMatrixUniforms();
gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER, miniIndexBuffer);
console.log(miniCoop);
for(part in miniCoop.parts){
var start = miniCoop.group[miniCoop.parts[part]][0];
var end = miniCoop.group[miniCoop.parts[part]][1];
gl.uniform3f(shaderProgram.colour, colormap[miniCoop.parts[part]][0], colormap[miniCoop.parts[part]][1], colormap[miniCoop.parts[part]][2]);
var offset = 2*3 * start;
var count = 3 *(end - start);
gl.drawElements(gl.TRIANGLES, count, gl.UNSIGNED_SHORT, offset);
}
}
但是,当调用抽屉元素时,场景不会在背景中绘制对象,导致绘制的第一个对象身体始终位于前景,而不管它在场景中的位置如何,并且场景的其余部分按照颜色贴图中显示的顺序显示。我不知道问题出在哪里,非常感谢您的帮助
输出图像示例:
在Dropbox上:是否打开深度测试
gl.enable(gl.DEPTH_TEST);
如果您查看dropbox上的完整内容,我在webGLStart函数中启用了它,这就是为什么它如此令人困惑的原因。