2016-05-02 103 views
2

我使用OpenGL正在開發一個渲染引擎,我想知道:OpenGL的遊戲引擎渲染

應該複製的頂點(平陰影,我們需要複製的頂點,因爲我們有2+法線單個頂點)在模型中創建,或者應該在引擎中實現一個算法來計算頂點需要重複的時間。一個例子就是一個岩石模型,它有鋒利的邊緣和光滑的表面。

對於我來說,藝術家會在建模軟件中爲尖銳的邊緣重複頂點,因爲引擎不知道藝術家的意圖是什麼(關於模型特徵)。引擎可能通過檢查臉部法線之間的角度來識別哪些頂點應該被複制,但是對於我來說,這樣做可能會覆蓋模型的特徵。

這是專門針對.obj模型的,因爲不同的出口商可能(沒有看過它)提供選項來滿足這種需求。

回答

2

您應該自己定義重複的頂點,因爲它們不是真的重複的頂點。

在圖形編程術語中,「頂點」應該定義全部定義單個點的必要信息。這包括但不一定限於:位置,正常,紋理座標和無紋理顏色。

所以一般來說,如果全部這個定義的數據在比較兩個點時是相同的(正負Epsilon),那麼頂點只是「重複的」。如果你寫一個算法來檢測和刪除這樣的重複,我會說沒有問題。

如果您希望某個算法能夠準確地確定某個頂點是否應該「平滑」或「平坦」,因爲沒有一個算法能夠正確地判斷出問題,那麼您將遇到問題。特別是在你的情況下:如果你期望岩石總是平滑陰影(這對於任何特別磨損的岩石都是合理的),你可能會沒問題,但鑑於你需要它考慮平滑和鋒利的邊緣,將永遠搞砸了。您需要兩種情況,其中< 10° angle平滑着色,並且>170° angle平滑着色。除非模型本身提供這些規則,否則你不會做對。

因此,總結:只需在模型中創建重複的頂點。不要試圖用你的方法算出來。大多數像樣的3D建模程序應該提供使這個過程相對無痛的功能。