2013-10-15 2 views
1

Three.js를 통해 메쉬를로드 중이며 각 쿼드를 개별적으로 텍스처링하려고합니다. 지금은 각면의 질감을 정할 수 있지만 현재 삼각형과 마지막 삼각형이 쿼드의 일부인지 확인하는 방법을 모르겠다. (그들은 두 개의 꼭지점을 공유하지만 어떤 점을 공유 할 것인가?)메쉬의 모든 쿼드 찾기

어떻게 할 수 있습니까? 두 개의 삼각형이 쿼드를 형성하는지 궁금해?

var last = null; 
for(var i in geometry.faces) 
{ 
    var face = geometry.faces[i]; 
    var normal = face.normal.clone().normalize(); 

    if(normal.y >= 0.9999) 
    { 
     face.materialIndex = 1; 

     //Determine if face & last are part of a quad 
     if(face && last == same quad) 
     { 
      face.color = last.color; 
     } 
     else 
     { 
      face.color = new THREE.Color(Math.random() * 0xFFFFFF); 
     } 

     last = face; 
    } 
} 

답변

1

먼저 문제가 제대로 정의되지 않았다는 것을 알아야합니다. 연결된 삼각형 메쉬에서 모든 삼각형은 3 개의 이웃을가집니다. 그들 중 하나가 각각 쿼드가 될 수 있습니다. 그래서 당신은 단지 쿼드가 무엇인지에 관해 좋은 추측을 할 수 있습니다. 평범한 점을 선택하는 것이 좋은 출발이지만, 예를 들어 메쉬가 비행기 인 경우에는 작동하지 않습니다.

첫 번째 단계는 각 삼각형에 대한 모든 이웃을 찾는 것입니다. 각 삼각형에는 정확하게 3 개의 이웃이 있습니다. 이것은 시간과 메모리에서 선형이어야하는 재미있는 2 패스 알고리즘입니다. 각 삼각형은 다른 삼각형에 대한 인덱스 인 이웃 [3]과 비슷해야합니다.

그런 다음 각각에 대해 "quadiness"추론을 계산할 수 있습니다. 그들은 대략 동일 평면 상이고 직사각형이어야한다. 나는 4면의 법선과 내각으로 점수를 매겼습니다. 일단 그 값을 얻으면,이 숫자로 모든 삼각형을 정렬 할 수 있습니다. 최선의 추측을 먼저 제거하고 쿼드로 병합 한 다음 완료 될 때까지 계속 진행하십시오.

이것은 대부분 괜찮은 시간대에 작동하지만이 문제가 발생할 수 있습니다. 왜 쿼드가 필요한지에 따라 휴리스틱 기능을 자신의 상황에 맞게 수정할 수 있습니다. 그러나 올바른 해결책이 없다는 것을 기억하는 것이 중요합니다. 문제는 정의되지 않았습니다.

+0

감사합니다. 사용자 정의 문제라고 생각합니다. 나는 이것을하기 위해 어떻게 노력하고 있는지 다시 생각할 필요가있다. – Shadda

+0

Btw, 저는 일부 3D 패키지가이 정보를 "스무딩 그룹 (smoothing groups)"으로 내보내는 것을 기억했습니다. 같은 그룹 ID를 가진 삼각형은 하나의 원래 다각형입니다. 나는 three.js가 이것을 드러내는 지 모르겠다. – starmole