2016-12-06 71 views
3

列表生成頂點的法線我有一個列表三角形像的如何從三角形的榆樹

type alias Vertex = {position: vec3} 
List (Vertex,Vertex,Vertex) 

形式,現在我要計算一個三角形的每個頂點的正常頂點。因此,我需要首先計算三角形的法線,這不是問題。我可以一個三角形,正常像這樣的模式:

type alias Triangle = {normal: Vertex, points: (Vertex,Vertex,Vertex)} 

然後映射在最初的名單,並計算三角形法線。

但是後來我需要找到所有三角形集共享相同的點來計算這個三角形的所有法線的這個點的法線。然後,我需要用結果更新這個所有的三角形,以存儲法線的所有頂點。然後特結果將是格式:

type alias Vertex = {position: vec3, normal: vec3} 
List (Vertex,Vertex,Vertex) 

所以我有一種感覺處理列表是也許不是最好的想法,但我不知道從哪裏開始。

回答

0

畢竟我想出了用2只單獨列出一個三角形一個點的解決方案:

type alias Mesh = 
    { triangles : List (Int, Int, Int) 
    , points : Array Point 
    } 

type alias Point = 
    { position : Vec3 
    , normal : Vec3 
    } 

三角形列表只抱在點單點的3個位置的元組。 然後花了3個步驟來創建三角形列表:

  1. 遍歷點創建三角形,並且在相同的步驟計算法線並將它們添加到的點。已更新的點重新放入數組中。
  2. 再次映射點以規範化總和。
  3. 迭代三角形列表使用元組中的位置來查找數組中的點。