태그 보관물: 3d

3d

Painter의 알고리즘으로 정확한 결과를 얻는 방법? 대한 좋은 실마리는 없습니다. 나는

얼마 전에 얼굴이 다른 얼굴과 겹치는 시점을 확인하는 방법을 물었습니다. 조언은 Z- 버퍼를 사용하는 것이 었습니다.

그러나 현재 프로젝트에서 Z 버퍼를 사용할 수 없으므로 Painter의 알고리즘을 사용하고 싶습니다. 그러나 표면이 다른 표면 뒤에 있거나 앞에있을 때에 대한 좋은 실마리는 없습니다. 나는 많은 방법을 시도했지만 모두 경우에 실패하거나 일반적인 경우에도 실패합니다.

이것은 지금까지 시도한 정렬 방법의 목록입니다.

  • 각면의 중간 점까지의 거리
  • 각면의 각 꼭짓점까지의 평균 거리
  • 각 꼭짓점의 평균 z 값
  • 각면의 꼭짓점의 z 값을 숨기고 먼저 정점을 그립니다.
  • 각면의 꼭짓점의 최저 z 값

문제는 얼굴의 거리가 더 멀어도 여전히 멀어 질 수 있다는 것입니다. 이 모든 방법은 신뢰할 수없는 것 같습니다.

편집 : 예를 들어, 다음 이미지에서 파란색 점이 더 가까우므로 중간 점이 파란색 포인트 인 표면이 빨간색 점이 중간 점 인 표면 위에 페인트됩니다. 그러나 이는 적색 점의 표면이 더 크고 중간 점이 더 멀기 때문입니다. 빨간색 점이있는 표면은 파란색 점 위에 칠해야합니다 . 중간 지점 거리가 반대라고 말하면 더 가깝기 때문 입니다.

여기에 이미지 설명을 입력하십시오

Painter의 알고리즘에서 객체가 그려지는 순서를 결정하기 위해 정확히 무엇을 사용합니까?



답변

일반적으로 카메라에서 다각형의 중간 점까지의 거리는 z 정렬에 사용됩니다. 화가의 알고리즘은 본 성상 100 % 정확할 수 없습니다. 어떤 기준점을 사용하든 정렬에 실패하는 경우가 항상 있습니다.

페인터 알고리즘을 사용하여 올바른 z 정렬을 원하면 겹치는 다각형을 작은 부분으로 슬라이스하고 (예 : 쿼드 트리 사용) 이러한 부분을 개별적으로 정렬해야합니다. 그러나 이것은 CPU에서 상당히 무거워 질 수 있습니다.

문제를 잘 보여주는 이 Powerpoint 파일 을 찾았습니다 ( PDF 버전 ).


답변

그런 경우에는 항상 bsp-tree를 사용하여 작동했습니다. bsp-tree의 노드에 볼록 다각형 세트가 생길 때까지 장면을 분할하면 노드 내에서 쉽게 다각형을 정렬 할 수 있습니다. bsp-tree 노드에서 다각형을 정렬하면 위에서 설명한 것과 같은 문제처럼 보이지만 bsp-tree를 구성한 후 문제가있는 모든 경우가 이미 해결 된 상태는 분명하지 않은 조건이 있습니다. 볼록성 테스트를 통과해야하는 다각형 세트로 구성-이 세트에서 하나의 다각형에서 평면을 선택하면 나머지 다각형은 모두 평면 앞 또는 평면 뒤에 있습니다. 이 정보를 사용하면 쉽게 정렬 할 수 있습니다. 분류 기능은 2 개의 다각형을 사용합니다. 두 번째 다각형에 대해 첫 번째 다각형이 절반 인 공간을 확인하고 두 번째 다각형에 대해 카메라의 배치를 확인하십시오.

또한 직교 및 투시 투영을 다룰 때 다각형에 대한 카메라 배치 측면과 bsp-tree의 횡단을 결정하는 테스트는 약간 다릅니다.

입력 다각형을 분할 할 여유가 없다면 운이 좋지 않은 것 같습니다.


답변