2013-12-11 5 views
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

답변

0

전원을 켜고?

gl.enable(gl.DEPTH_TEST); 
+0

dropbox에서 모든 것을 살펴보면 webGLStart() 함수에서 사용할 수있게되어 매우 혼란 스럽습니다. – user3090254

관련 문제