在處理科學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。
請稍微編輯一下以便以問題形式提供,以便我們可以更好地回答。 – demongolem 2014-10-20 19:10:19
看起來好像要使用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 2014-10-20 19:33:24
謝謝你的回答。禁用線框圖的深度測試並不能解決問題,因爲現在所有的線框線都顯示在每個模型上,但我只想看到可見的線框線。 – user3413372 2014-10-20 20:33:25