Appel의 은선 제거 알고리즘에 대한 등고선을 찾는 방법


10

재미를 위해 DCPU-16 의 와이어 프레임 뷰어를 만들려고합니다 . 와이어 프레임에 숨겨진 선을 숨기는 방법을 제외한 모든 작업을 수행하는 방법을 이해합니다. 여기에있는 모든 질문은 모두 OpenGL에 액세스 할 수 있다고 가정하지만 불행히도 DCPU-16 (또는 모든 종류의 하드웨어 가속)과 같은 것에 액세스 할 수 없습니다.

Google 도서 에서 Appel의 알고리즘에 대해 상당히 잘 설명했습니다 . 그러나 알아내는 데 문제가있는 한 가지 문제가 있습니다.

등고선을 정면 및 후면 다각형이 공유하는 모서리 또는 닫힌 다면체의 일부가 아닌 전면 다각형의 공유되지 않은 모서리로 정의합니다. 두 개의 정면 다각형이 공유하는 모서리는 가시성을 변경하지 않으므로 윤곽선이 아닙니다. 그림 8.4에서 모서리 AB, EF, PC, GK 및 CH는 등고선이지만 모서리 ED, DC 및 GI는 그렇지 않습니다.

그림 8.4

알고리즘의 규칙과 윤곽선이 있으면 알고리즘의 작동 방식을 이해하지만 가장자리가 " 정면 및 후면 다각형으로 공유 되는지 여부를 결정하기 위해 수행해야하는 작업인지 이해하지 못합니다." 코딩 관점에서 닫힌 다면체의 일부가 아닌 정면 폴리곤의 비공유 에지 ". 모양을보고 머리에 등고선이 어떤 선인지 알 수 있지만 "알려진"코드를 알고리즘으로 변환하는 방법에 대한 실마리는 없습니다.


최신 정보

등고선을 결정하는 데 약간의 진전이있었습니다. 나는 컴퓨터 그래픽에 관한 University of Buffalo 수업 에서이 강의 노트를 찾았습니다 .

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

가장자리를 고려하십시오. 이들은 세 가지 범주로 나뉩니다.

  1. 두 개의 보이지 않는면을 결합하는 모서리 자체는 보이지 않습니다. 이것은 목록에서 삭제되고 무시됩니다.
  2. 눈에 보이는 두면을 결합하는 모서리를 '재료 모서리'라고하며 추가 처리가 필요합니다.
  3. 잠재적으로 보이는면과 보이지 않는면을 결합하는 모서리는 '재료 모서리'의 특수한 경우이며 '형상 모서리'라고도합니다.

위의 두 가지 정보를 사용하여 이것을 코드로 작성할 수있는 것에 더 가까워 질 수는 있지만 아직 갈 길이 멀다.



1
삼각형의 법선을 계산할 때이 답변 을 확인하십시오 . 시선 벡터가있는 법선 벡터의 내적은 삼각형이 정면을 향하는 지 여부를 결정합니다.

답변:


3

"대면"규칙을 유지하려면 모든면의 방향이 올바른지 확인해야합니다. 예를 들어 오른쪽 규칙을 사용합니다. 즉,면 평면의 양의 회전이 다면체 외부의 정상적인 포인팅과 일치하도록면의 꼭짓점에 번호가 지정되어야합니다. 또는 더 간단히 말하면, 모든 얼굴에는 바깥을 향한 법선이 있어야합니다.

닫힌 다면체에 속하지 않는 매달려있는면은 결정되지 않은 방향을 갖는 것으로 볼 수 있습니다.

이제 윤곽 다각형에 의해 숨겨지는 가장자리 부분을 계산하는 것이 주요 과정입니다. 이 문제는 2D에서 다각형 창으로 선분을 클리핑하는 것과 매우 비슷합니다. 먼저 선분의 지지선을 고려하고 다각형과의 교점을 찾으십시오. 패리티 규칙을 사용하면 다각형 내부와 외부의 부품을 쉽게 확인할 수 있습니다.

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