2014-09-09 1 views
3

내 와이어 프레임 드로잉에서 모든 숨겨진 선 (또는 선의 일부)을 점선으로 그려 봅니다. 약간의 연구가 끝나면 렌더링시 몇 가지 단계를 거쳐야 달성 할 수 있다는 것을 알 수 있습니다.숨겨진 선을 와이어 프레임에서 점선으로 그립니다.

여기까지 제가 지금까지 가지고 있습니다.

// -- preamble stuff -- 
gl.glClearColor(1.f, 1.f, 1.f, 1.f); 
gl.glShadeModel(GL.GL_SMOOTH); 
gl.glDepthFunc(GL.GL_LEQUAL); 
gl.glLineWidth(2); 

gl.glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); 

// -- render hidden lines with stipple set, color mask enabled, depth buffer disabled -- 
gl.glDisable(GL_DEPTH_TEST); 
gl.glColorMask(true, true, true, true); 
gl.glLineStipple(1, (short) 0x00FF); 
gl.glEnable(GL_LINE_STIPPLE); 
gl.glPolygonMode(GL_FRONT_AND_BACK, GL_LINE); 
renderGLDisplayLists(); // -- does the rendering 

// -- render in fill mode with color mask disabled, depth buffer enabled -- 
gl.glEnable(GL_DEPTH_TEST); 
gl.glColorMask(false, false, false, false); 
gl.glPolygonMode(GL_FRONT_AND_BACK, GL_FILL); 
renderGLDisplayLists(); 

// -- final pass to render visible lines -- 
gl.glColorMask(true, true, true, true); 
gl.glEnable(GL_LINE); 
gl.glPolygonMode(GL_FRONT_AND_BACK, GL_LINE); 
renderGLDisplayLists(); 

내가 작업하고있는 특별한 경우에 이것을 실행할 때 어떤 일이 발생했는지를 첨부했습니다.

답변

4

당신은 반전 깊이 활성화 버퍼하지만 에 마지막으로 점각 라인을 그리고 읽기 전용

//just drew the fills 
gl.glDepthMask(false); 
lg.glDepthFunc(gl.GL_GREATER);//reverses the depth buffer 
//render 
gl.glColorMask(true, true, true, true); 
gl.glLineStipple(1, (short) 0x00FF); 
gl.glEnable(GL_LINE_STIPPLE); 
gl.glPolygonMode(GL_FRONT_AND_BACK, GL_LINE); 
renderGLDisplayLists(); // -- does the rendering 

gl.glDepthMask(true); 
lg.glDepthFunc(gl.GL_LESS);//restores the depth buffer 
을한다