2016-11-01 6 views
0

내가 메쉬 표현을 알고있는이 세 가지 목록을 사용하는 것이 일반적이다?얼굴 목록은 무엇을 나타 냅니까? 이것은</p> <p>일반 목록을 이해하기 쉬운,</p> <p>정점 목록, 모든 정점 것 같아요 각 표면에 대한 법선 :

그리고 얼굴 목록, 나는 그것이 무엇을하는지 전혀 모르고 그것을 계산하는 방법을 모른다.

예를 들어, 온라인에서 찾은 삼각 프리즘을 설명하는 메쉬입니다.

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 개의 요소가 있지만 앞뒤에는 4 개의 요소가 있습니까? 수동으로 어떻게 계산합니까?

답변

1

일반적으로면은 정점 배열에서 각 삼각형의 색인을 저장합니다. 첫 번째면은 정점 [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} 

얼굴 예를 들어 {1,4,5} : 간결성을 위해

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을 정의 할 수 있습니다.

또한 법선 벡터는 얼굴 정점 간 교차 곱으로 계산됩니다. 규칙에 따라 법선 벡터의 방향은 메쉬 바깥쪽으로 향하게됩니다. 예를 들면 다음과 같습니다.

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

경우에 따라 얼굴 정의에서 4 가지 색인을 보는 것이 이상합니다. 일반적으로 배열에는 3 개의 항목 만 있어야합니다. 이게 실수가 아니겠습니까?