2014-10-20 2 views
0

과학적 3D 모델을 시각화 할 때 문제가 발생했습니다. 작업은 색상과 와이어 프레임 오버레이로 채워진 모델을 렌더링하는 것입니다. 닫힌 서페이스가있는 솔리드 인 모델의 경우에는이 방법이 적합합니다.OpenGL : 와이어 프레임 오버레이 은선 제거

문제 # 1 :

나는 렌더링하기 전에 가시성/방향에 대해 아무것도 모른 채 여러 다각형이있다. 모든 폴리곤이 올바르게 표시되도록하려면 모든 폴리곤을 시계 방향으로 그 다음 반 시계 방향으로 그립니다. 와이어 프레임 오버레이와 동일합니다. 이것은 일부 모델에서는 작동하지만 모든 모델에서는 작동하지 않는 것으로 보입니다.

일부 모델은 this처럼 보입니다.

문제 # 2 :

이이 문제 # 1 관련이 있는지 잘 모르겠지만, PolygonOffset 일부 가장자리가 아마 때문에 모델 다각형의 혼합 지향의 나쁜 보이게 : Wireframe edges

** 코드 : **

제한 사항으로 인해 Fortran 77에서 코드를 작성해야합니다. 그럼에도 불구하고 OpenGL 호출은 동일하게 유지됩니다. 다음은 모델 그리기 코드입니다.

c  Draw object 
     do 10 i=1,2 
c  Select correct orientation 
     if(ccw) then 
      call glFrontFace(GL_CCW) 
     else 
      call glFrontFace(GL_CW) 
     endif 

c  Set object color 
     call glColor3f(1.0,1.0,1.0) 

c  Set polygon mode to fill 
     call glPolygonMode(GL_FRONT_AND_BACK,GL_FILL) 

c  Set polygon offset and enable offset (float for glPolygonOffset, 
c  otherwise it won't work) 
     call glPolygonOffset(1.0,2.0) 
     call glEnable(GL_POLYGON_OFFSET_FILL) 

c  Draw object 
     call glCallList(lindex) 

c  Disable polygon offset 
     call glDisable(GL_POLYGON_OFFSET_FILL) 

c  Reverse orientation 
     ccw = .not. ccw 
10 continue 

c  Draw Wireframe onto Object 
     do 20 i=1,2 
c  Select correct orientation 
     if(ccw) then 
      call glFrontFace(GL_CCW) 
     else 
      call glFrontFace(GL_CW) 
     endif 

c  Set object color 
     call glColor3f(0.0,0.0,0.0) 

c  Set polygon mode to wireframe 
     call glPolygonMode(GL_FRONT_AND_BACK,GL_LINE) 

c  Draw object 
     call glCallList(lindex) 

c  Set polygon mode to fill 
     call glPolygonMode(GL_FRONT_AND_BACK,GL_FILL) 

c  Reverse orientation 
     ccw = .not. ccw 
20 continue 

기타 정보 : 도려내 기가 설정되었으며 깊이 기능은 GL_LESS입니다.

+0

질문의 형식으로 약간 수정 해 주시면보다 정확하게 답변 해 드리겠습니다. – demongolem

+0

GL_POLYGON_OFFSET_FILL을 사용하여 견고한 객체를 그리고 그 위에 와이어 프레임을 그리는 것처럼 보입니다. 더 간단한 방법으로, 와이어 프레임을 그리기 전에 glDisable (GL_DEPTH_TEST)을 수행 한 다음 그 후에 glEnable (GL_DEPTH_TEST)을 수행하면 GL_POLYGON_OFFSET_FILL이 전혀 필요하지 않습니다. 그리기 전에 glDisable (GL_CULL_FACE)을 수행하면이 못 생기는 glFrontFace (GL_CCW)/glFrontFace (GL_CW) 저글링을 제거 할 수 있습니다. – pelya

+0

답장을 보내 주셔서 감사합니다. 와이어 프레임 드로잉에 대한 심도 테스트를 비활성화해도 문제가 해결되지는 않습니다. 모든 와이어 프레임 선이 모든 모델에 표시되지만 이제는 와이어 프레임 선만 보려고합니다. – user3413372

답변

0

CW 및 CCW를 사용하는 경우 왜 GL_FRONT_AND_BACK을 사용하여 렌더링합니까? 확실히 GL_FRONT 만 사용하십시오. glOffset에는 한계가 있기 때문에 일부 가장자리가 모델에 옵셋 될 수 있으므로 일부 가장자리의 가장자리가 울퉁불퉁합니다. 모두 가장자리에 따라 다릅니다. X2d4K를 살펴보면 모델 자체에 '잘못된 방향의'표면이 포함될 수 있다는 인상을받습니다. 따라서 선호스럽게 배면 컬링없이이 작업을 시도해보십시오. 깊이 버퍼는 방향 변화를 숨기는 데 아무런 문제가 없어야합니다.

0

내 문제의 원인을 발견했습니다. 16 비트 깊이 버퍼를 사용하여 32 비트로 전환하면 모든 문제가 해결됩니다.

관련 문제