2014-01-18 3 views
0

learningwebgl.com을 통해 읽고 있는데, 내가 혼란스럽게 생각하는 것은 마지막 요소로 바인딩 한 첫 번째 버퍼를 그립니다.webgl 드로잉 순서, 스텐실 버퍼

http://jsfiddle.net/Cx8gG/1/

red triangle 
green square 
blue square 

나는 다른 모든 초과 인출 얻을 수 있기 때문에 단지 파란색 사각형을 볼 것으로 예상은, 출력은 역순 것 같다?

스텐실 버퍼에 대해서도 읽었으므로 마스크 (빨간색)를 만들고 파란색 사각형에 녹색 삼각형이 있어야합니다.

마스크가 작동하지만 (http://jsfiddle.net/D3QNg/3/) 맞는지, 아니면 운이 좋은지 나는 알 수 없습니다.

도움을 주셔서 감사합니다. 만약 라인 (203)

gl.enable(gl.DEPTH_TEST); 

깊이 버퍼가 그려진 각 픽셀의 깊이를 가지고있는 깊이 버퍼를 사용할 수 있기 때문에

+0

은 별도의 질문에 스텐실 부분을 분리 할 수있는 함수를 호출하여 WebGL을 픽셀을 그릴 여부를 결정하는 데 사용하는 비교를 설정할 수 있습니다 활성화? – gman

답변

5

은이를 수행. 기본 모드에서 픽셀을 그릴 때 WebGL은 이미있는 픽셀의 깊이를 확인합니다. 새 픽셀의 깊이가 LESS 인 경우에만 이전 픽셀이 새 픽셀을 그립니다.

모든 모양의 깊이가 0.0이므로 첫 번째 모양은 0.0 인 픽셀의 깊이 버퍼를 채 웁니다. 그리는 다음 도형은 0.0보다 작지 않은 각 픽셀에 대해 0.0의 깊이를 가지고 있기 때문에 해당 픽셀이 덮어 쓰이지 않습니다.

깊이 테스트를 사용하는 선을 주석 처리하면 결과가 나타납니다 너는 기대하고 있었다.

주, 깊이 테스트 당신이 gl.depthFunc (docs)

관련 문제