2009-02-18 54 views
8

我在這裏問了一些問題,看到這個幾何形狀在其他測地線形狀中被提及過幾次,但我很好奇我怎樣才能生成一個關於xyz的點?如何生成細分的二十面體?

+2

有一個教程[這裏](http://www.donhavey.com/blog/tutorials/tutorial-3-the-icosahedron-sphere/)。 – 2009-02-18 13:50:20

回答

9

Here是我用於基於OpenGL紅皮書的細分二十面體的一個參考。我的iPhone應用程序Molecules的BSD許可source code包含用於生成簡單的二十面體並將它們加載到OpenGL ES的頂點緩衝對象中的代碼。我還沒有納入細分來提高渲染的質量,但它在我的計劃中。

10

有一個教程here

基本的想法是從一個二十面體(有20個三角形面)開始,並將每個三角面反覆細分爲更小的三角形。在每個階段,每個新點都會徑向移動,因此距離中心點的距離是正確的。

階段的數量將決定生成多少個三角形,從而確定生成的網格與球體的接近程度。

+0

現在添加了鏈接文章的摘要(我不認爲我在6年前就知道這個規則......) – 2015-04-10 15:40:33

+0

抱歉,這是來自審查隊列的回覆 - 我甚至沒有注意到'09年在答案上蓋章。感謝更新。 – LittleBobbyTables 2015-04-10 15:45:04

7

要計算一個球體,大多數人將線性細分,但不會產生圓形。

對於一個圓角的tesselation,旋轉兩個點通過一系列的旋轉。

  1. 繞z中的第二個點(通過點1的z角)爲0
  2. 繞y中的第二個點(通過點1的y角)爲0(這在邏輯上把點1處北極)。
  3. 將z周圍的第二個點旋轉到0(這在邏輯上將點1放在x/y平面上,現在它變成一個單位圓)。
  4. 找到半角,計算新的第3點第3點的x和y。
  5. 按照與步驟3),2)和1)相反的順序執行反轉以將第3點它的目的地。

還有一些數學方面的考慮值,每個接近0的位置附近的值,如北極和南極,以及最右邊和最左邊以及最前和最後位置,因此如果他們在這些位置,請首先檢查它們並按pi/4(45度)執行額外的旋轉。這可以防止浮點數學庫被嚇倒,併爲atan2()和其他trig函數生成大量字符外值。

希望這有助於! :-)

相關問題