2009-05-29 70 views
3

有人知道如何繪製3D曲面並隱藏無形線條嗎?如何繪製3D曲面並隱藏無形線條?

我記得從Apple II電子書閱讀一些代碼,這是隻有約25基本路線,並且它可以繪製一些3D表面,如山或看起來像水波紋的形狀。首先顯示無形線條,但添加了幾行代碼後,無形線條也消失了。

是否有人知道如何做到這一點還是知道資源網這樣做呢?

+0

實際上,它可以是點或線...我認爲在某些情況下,該點被連接到形成線 – 2009-05-29 04:35:35

回答

5

這取決於你如何繪製多邊形。我建議您閱讀一些關於OpenGL或DirectX的內容,因爲它們旨在爲您解決許多這些問題。如果你不想直接使用它們,那麼已經在這些API之上建立了許多偉大的引擎。

假設你正在繪製填充多邊形(紋理,固體等),這裏有幾個常見的算法可以使用:

  • 排序從相機的多邊形的距離和第一畫那些furtherest遠,否則被稱爲Painters Algorithm。許多舊的3D遊戲都使用這種方法,如經典Doom,它也使用BSP Tree進行高效分類。

  • 存儲距離攝像機最近的距離到屏幕上的每個pizel,並且不要畫任何更遠的地方,否則稱爲Z-Buffering。這種方法得到了現代3D視頻卡,OpenGL和DirectX的大力支持。

  • 使用ray tracing算法自然已隱面消除。

+0

是的。有意義使用我們的硬件。提問者正在談論的代碼是繪製線條,但沒有填充多邊形。 – Nosredna 2009-05-29 03:58:11

3

我記得那本書。如果我沒有記錯的話,這些都是曲面圖,使用的技巧是從前到後繪製線條,跟蹤每個x繪製的最小和最大y值。可能是抽屜是佈雷森漢姆,修改後跳過所畫的點數,除非它們大於最大值或小於最小值。

有關的算法是你可以做的曲線,也有什麼好的。不只是線段。可能漣漪圖片是以x和y爲參數的trig函數的某種組合。

我仍然可以看到在我的頭上的情節。很想知道這本書是從哪裏來的。

2

如果您繪製三角形網格,那麼你應該做的每一個三角形的背面剔除,並沒有得出有三角形的邊正常的背對面。您將法線計算爲三角形中兩個連續邊的叉積。

如果你想只繪製的輪廓,只繪製邊,一個三角形之間去前置正常的,一個三角形的背對着正常。

或者你使用OpenGL,打開深度緩存,而忘記了所有底層的數學:-)