Painter의 알고리즘으로 정확한 결과를 얻는 방법?


14

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

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

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

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

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

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

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

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


1
화가 알고리즘은 단지 전면 후면에서 받고있다.
Jonathan Connell

1
@ 3nixios : 예, 물론, 어떻게 '뒤에서 앞으로'의 순서를 결정할 수 있습니까?
pimvdb

1
모든 객체, 삼각형 또는 정점은 그리기를 시작할 때 카메라와 일정 거리를 유지합니다. 기본 알고리즘을 구현하면 (성공 했습니까?) 각 삼각형에 대해 카메라에서이 거리를 결정하고 가장 가까운 순서로 그려야합니다. 완료되면 교차점을 찾고 삼각형을 자르기 시작해야합니다. 이것은 완전히 다른 볼 게임 입니다. 왜 Z-Buffer를 사용할 수 없습니까? : P
Jonathan Connell

@ 3nixios : 당신은 완전히 정확하지만 내가 직면 한 문제는 거리를 계산하는 것입니다. 내가 말했듯이, 나는 몇 가지 거리 방법을 시도했지만 모두 완벽하지는 않습니다. 이 순서는 중간 점 거리 정렬 ( i.imgur.com/AcfCm.png) 에서 비롯 됩니다.
pimvdb

1
모든 다각형이 일반 그리드에 있습니까? 그렇다면 그리드를 개선하기 위해 할 수있는 일이있을 수 있습니다.
CiscoIPPhone

답변:


14

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

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

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


Powerpoint에 감사드립니다. 문제를 해결하는 데 도움이되었습니다.
pimvdb

링크가 끊어졌습니다. 누구든지 사본을 찾을 수 있습니까?
Keavon

1
@Keavon 편집했습니다. 파일에 대한 작업 링크를 찾았습니다.
bummzack

1

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

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

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

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.