2011-07-17 3 views
4

지도의 건물에 대한 벡터 데이터가 있으며 알려진 높이에 따라 돌출 된 것처럼 보이게하려고합니다.의사 3D 건물이 시각적으로 겹치지 않도록 정렬/묘화하는 방법

저는 이것이 일반적인 작업이라는 것을 알고 있지만 만족할만한 해결책을 찾지 못했습니다.

mapnik에서 실현 된 것을 보았을 때, 폴리곤의 모든 정점 중 최소 Y만큼 간단한 정렬을 사용합니다. 결과적으로 대부분의 경우 오른쪽으로 그려 지지만 일부는 여전히 겹쳐져 있습니다 (약 2-3 %). 그냥 (? 어떻게 든) 잘 buldings를 정렬하고 (위의 경우이 순서가 3-2-1을 것이다) 적절한 순서를 끌기에 충분하다 대부분의 경우

Buildings overlap if sorted just by minimum Y

.

더 복잡한 경우 다각형이 오목하고 서로 너무 가까울 경우 모든 벽과 캡 (지붕)을 별도로 그려야합니다 (아래 참조).

enter image description here

업데이트 : 벽과 캡 :

그래서, 두 그릴 세그먼트의 종류가 있습니다. 벽 세그먼트는 최소 Y 단위로 주문하기 쉽습니다. 나는 대문을 주문하는 방법을 알아낼 수 없다.

감사합니다.

+0

항상 위에서 건물을보고 있다면 모자가 항상 벽 앞에 있지 않습니까? 대문자가 모두 같은 높이에 있다면, 결코 중첩되지 않아야합니다. – Alan

+0

@Alan 아니, 일반적인 경우에는 높이가 다르기 때문에 그냥 쉬지 않다. –

+0

아, 너는 높이가 다른 건물을 가지고 있으면 사물을 바꾼다. 일반적인 경우의 해결책은 z 버퍼링을 사용하는 것입니다. – Alan

답변

2

직선 벽의 경우 깊이별로 쉽게 분류 할 수 있습니다. 직선 부분 인 기지를 고려하십시오. 각 행은 평면을 두 부분으로 나눕니다. 그 중 하나는 뷰어에 더 가깝고 다른 하나는 더 멀리 있습니다. 세그먼트 A의 경우에는 가까운 부분 A +와 멀리있는 부분 A-를 호출하십시오. 지금, 임의의 두 개의 세그먼트들 A 및 B를 들어, 제안들 중 적어도 하나가 원하는 분야

  1. A는 B에 완전히 놓여 +
  2. A는 B-
  3. B에 완전히 놓여은
  4. A-에 완전히 놓여 B는 +
  5. 하나의 세그먼트가 시선에 평행이고, 다른 하나는 왼쪽으로 또는 전체적으로
  6. A와 B가 교차
  7. 그 오른쪽에 완전히 인에 완전히 놓여
,

경우 1과 3에서 B는 A보다 먼저 그려야합니다 (A는 A를 닫을 수 있지만 B는 A를 닫을 수 없습니다). (2)와 (4)의 경우 B보다 먼저; 경우 5에서 중요하지 않습니다. 정상적인 벽에서는 6이 발생하지 않아야합니다.

이제 토폴로지 종류의 벽을 수행 할 수 있으며 가장 먼 벽에서 가장 가까운 벽까지 그림을 그릴 수 있습니다.

지붕의 경우 지붕의 일부가 같은 지붕의 다른 부분을 가리는 벽으로 가려 질 수 있으므로 지붕의 경우 불가능합니다. U- 모양의 건물을 상상해보십시오. U 자 중심에 높이가있는 타워가 있습니다. 타워는 U- 지붕에 의해 가려져 보이지 않게됩니다. 그래서 어떤 순서로 그릴 지, 사진은 잘못된.

그래서 오목한 지붕을 볼록한 다각형으로 세분해야합니다. 그런 다음 같은 원칙에 따라 벽과 함께 정렬하는 것이 쉬워야합니다.

완전히 다른 방법은 Z 버퍼를 사용하여 순서에 대해 생각할 필요가 없도록하는 것입니다. 요즘 저전력 휴대 전화 그래픽 카드 중에서 가장 낮은 Z- 버퍼를 얻을 수 있다는 인상입니다.

+0

지붕 테셀레이션에 대해 설명해 주셔서 감사하지만 여전히 알고리즘을 이해하려고합니다. 더 낮은 지점의 벽만 나중에 그려야합니까 (직선 벽의 경우)? –

+0

그래서 이전의 가정을 테스트했는데 올바르지 않습니다. 그러나, 나는 정확하게 당신이 "B +에 전적으로 거짓말"이라고 말하는 것을 비교하지 못했습니다. 그런 인식을 못해서 미안해. 나는 네가 옳다고 생각하지만 너의 요점에 다다를 수는 없다. –

+1

직선 A는지면을 두 개의 하프 평면으로 나눕니다. 시청자가 남쪽에서 북쪽으로 직접 보인다고 가정합니다. 벽이 자오선을 따라 가면 A + 또는 A- 하프 평면은없고 왼쪽 및 오른쪽 하프 평면 만 있습니다 (사례 5). 다른 모든 경우에는 우리가 A +라고 부르는 "더 남쪽의"반면 (벽에 의해 가려지지 않음)과 A-라고 부르는 "더 북쪽의"(부분적으로 벽으로 가려 짐) 부분이 있습니다. –

관련 문제