저는 STL 파일 가져 오기 도구로 작업 중이며 삼각형 권선 순서를 결정하기 위해 주어진 표준을 사용할 것이라고 생각했습니다. 아래에 4 개의 삼각형이있는 샘플 데이터가 포함되어 있습니다 (원본 데이터에는 70,000 개 이상의 삼각형이 있음). 내 코드의 논리는 정점이 반 시계 방향으로 지정되었다고 가정하고 법선을 계산 한 다음이 계산 된 법선과 제공된 법선의 내적을 계산합니다. 결과가 양수이면 반 시계 방향으로, 그 외의 경우 시계 방향으로 가정합니다.광 조형 (STL) 파일 (삼각 분할 된 객체)의 삼각형 꼭지점 권선 순서
tm.SetCCW(Dot(Cross(facet.getVertex2() - facet.getVertex1(),facet.getVertex3() - facet.getVertex1()),facet.getNormal()) > 0.0);
이 논리는 특정 3D 스캐너의 파일 세트에서 실패합니다. 이 파일들을 Rhino3D에로드하고 "Dir"을 실행하여 정상 방향을 볼 때 Rhino가 올바른 방향을 가지고 있습니다! 내가 시도한 다른 STL 시청자 몇 명과 동일합니다.
내 코드는 샘플 데이터에서 시계 방향으로 정점이 제공된다고 추론하지만이 와인딩 순서를 사용하면 제공된 법선이 잘못되었음을 암시하면서 모델이 뒤집혀 있습니다.
이것은 STL 수입업자가 공급 된 법선을 무시하고 반 시계 방향으로 권선하는 것을 전제로한다는 결론에 이르게합니다. 나는 내 가정이 올바른지 여부에 무게를다는 STL 파일 형식에 더 많은 경험을 가진 사람들을 찾고 있습니다.
solid object_name
facet normal -0.651094 0.733745 -0.194150
outer loop
vertex 30.335684 -40.893806 -68.126500
vertex 31.155055 -39.911656 -67.162500
vertex 30.263726 -40.702583 -67.162500
endloop
endfacet
facet normal -0.654292 0.732059 -0.189714
outer loop
vertex 30.335684 -40.893806 -68.126500
vertex 31.225185 -40.098797 -68.126500
vertex 31.155055 -39.911656 -67.162500
endloop
endfacet
facet normal -0.711866 0.677947 -0.183397
outer loop
vertex 31.225185 -40.098797 -68.126500
vertex 31.980540 -39.044870 -67.162500
vertex 31.155055 -39.911656 -67.162500
endloop
endfacet
facet normal -0.714326 0.676343 -0.179716
outer loop
vertex 31.225185 -40.098797 -68.126500
vertex 32.048799 -39.228928 -68.126500
vertex 31.980540 -39.044870 -67.162500
endloop
endfacet
endsolid
EDIT : 제 패싯 내 계산 : 정점은 물체의 외부에서 볼 때
p1 = {30.335684, -40.893806, -68.126500}
p2 = {31.155055, -39.911656, -67.162500}
p3 = {30.263726, -40.702583, -67.162500}
u = p2 - p1 = {0.819371, 0.98215, 0.964}
w = p3 - p1 = {-0.071958, 0.191223, 0.964}
u x w = {0.762454, -0.859241, 0.227356} (calculated normal)
given normal = {-0.651094, 0.733745, -0.194150}
calculated_normal <dot> given_normal = -1.17103
verdict: 90 < theta < 270 where theta is the angle between the calculated and given normals
답변 해 주셔서 감사합니다. STL 파일에있는 소스가 시계 반대 방향이어야합니까? 이것은 내가 만난 파일의 90 % 이상을 차지하는 것으로 보이며 CCW가되어야하는 무작위 웹 페이지를 읽었지만 결정적으로 본 적이 전혀 없습니다. – PeteUK