0
for 루프를 사용하여 자동차의 각 부분을 별도로 렌더링하는 Mini Cooper가있는 장면을 그릴 때 다음과 같은 기능이 있습니다. 장면 그러나 여러 개의 gl.drawElements 호출이 올바르게 작동하지 않습니다.
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);
}
}
에 관계없이 그것의 위치에있어, 항상 전경에있는 것으로, 그려지는 제일 먼저 그 결과, drawElements()가 호출 백그라운드에서 몸을 일을 통해 그려하지 않습니다 장면 및 장면의 나머지 부분은 색상 맵에 표시된 순서대로 표시됩니다. 나는 그 문제가 무엇인지 모르며, 약간의 도움에 정말로 감사 할 것입니다.
예 출력 이미지 : 드롭 박스에 http://imgur.com/LAnp2Rv : 깊이 테스트에 https://dl.dropboxusercontent.com/u/80759516/test.html가
dropbox에서 모든 것을 살펴보면 webGLStart() 함수에서 사용할 수있게되어 매우 혼란 스럽습니다. – user3090254