2016-11-01 17 views
0

我知道在網格表示,通常使用三個列表:臉部表格代表什麼?

頂點列表,所有頂點,這是很容易理解

常規列表,每個面我猜法線?

和臉部列表,我不知道它的作用,我不知道如何計算它。

例如,這是一個描述我在網上找到的三棱鏡的網格。

double vertices[][] = {{0,1,-1}, 
      {-0.5,0,-1}, 
      {0.5,0,-1}, 
      {0,1,-3}, 
      {-0.5,0,-3}, 
      {0.5,0,-3}, 
      }; 

int faces[][] = {{0,1,2}, //front 
     {3,5,4}, //back 
     {1,4,5,2},//base 
     {0,3,4,1}, //left side 
     {0,2,5,3} //right side 
     }; 

double normals[][] = { {0,0,1}, //front face 
      {0,0,-1}, //back face 
      {0,-1,0}, //base 
        {-2.0/Math.sqrt(5),1.0/Math.sqrt(5),0}, //left 
        {2.0/Math.sqrt(5),1.0/Math.sqrt(5),0} //right 
      }; 

爲什麼在底座,左右臉上有4個元素,但前後只有3個元素?我如何手動計算它們?

回答

1

通常,faces存儲頂點數組中每個三角形的索引。所以第一張臉是由頂點[0],頂點[1],頂點[2]組成的三角形。第二個由頂點[3],頂點[4],頂點[5]等組成。

+0

謝謝你的解釋。我不確定這裏的「索引」這個詞是什麼意思,或者我應該做什麼操作。你能給我一個更詳細的例子嗎? – SuperMurloc

0

對於三角形網格,面是由3個頂點定義的三角形。通常,網格由n個頂點和m個面組成。例如:

頂點:

Point_0 = {0,0,0} 
Point_1 = {2,0,0} 
Point_3 = {0,2,0} 
Point_4 = {0,3,0} 
... 
Point_n = {30,0,0} 

面孔:

Face_0 = {Point_1, Point_4, Point_5} 
Face_1 = {Point_2, Point_4, Point_7} 
... 
Face_m = {Point_1, Point_2, Point_n} 

爲了簡潔起見,你可以定義Face_0爲一組指標:{1,4,5}。

此外,法向量被計算爲面的頂點之間的叉積。按照慣例,法向矢量的方向指向網格外部。例如:

normal_face_0 = CrossProcuct ((Point_4 - Point_1) , (Point_5 - Point_4)) 

就你而言,在臉部定義中看到四個索引是相當奇怪的。通常,陣列中只應該有3個項目。你確定這不是一個錯誤嗎?