본문 바로가기
Develop/Map Tool 3D

2008. 12. 05. Indoor Polygon Divide Logic

by deviAk 2008. 12. 5.
반응형
2008/12/05 - [Ψ Develop/Δ Map Tool 3D] - 2008. 12. 05. Map Editor



내부지형 맵에디터 제작 하면서 폴리곤 분할에 사용했던 로직이다.

이 방법이 제대로 된 방법인지는 모르겠지만 여러 생각 끝에 나온 방법이다.

먼저 위의 폴리곤은 0 -> 1 -> 2 의 순서대로 그리는 폴리곤이다.

위의 폴리곤을 중간의 선으로 나눈다고 가정 하였을 때 다음과 같은 작업을 한다.
( 분할면의 노말은 <- 쪽이다. )

Front 와 Back 정점들을 넣을 공간을 vFront, vBack 이라 하겠다.

정점 0과 분할면을 비교하여 정점 0이 분할면 앞인가 뒤인가를 판단한다.  ( 정점 0은 분할면 앞쪽에 있다. )
정점 0과 1을 연결한 선분과 분할면을 검사하여 분할면에 걸쳤는지 판단한다. ( 선분01은 분할면에 나눠져야 한다 )
선분01은 분할면에 의하여 나눠져야 하므로 일단 vFront에 정점 0을 넣는다. ( vFront : 0  vBack : NULL )
선분01과 분할면을 계산하여 정점3에 대한 정보를 얻고 vFront, vBack에 넣는다. ( vFront : 0, 3 vBack : 3 )

정점 1과 분할면을 비교하여 정점 1이 분할면 앞인가 뒤인가를 판단한다. ( 정점 1은 분할면 뒤쪽에 있다. )
정점 1과 2을 연결한 선분과 분할면을 검사하여 분할면에 걸쳤는지 판단한다. ( 선분12은 분할면에 나눠져야 한다 )
선분12은 분할면에 의하여 나눠져야 하므로 일단 vBack에 정점 1을 넣는다. ( vFront : 0, 3  vBack : 3, 1 )
선분12와 분할면을 계산하여 정점4에 대한 정보를 얻고 vFront, vBack에 넣는다. ( vFront : 0, 3, 4 vBack : 3, 1, 4 )

정점 2와 분할면을 비교하여 정점 2가 분할면 앞인가 뒤인가를 판단한다.  ( 정점 2는 분할면 앞쪽에 있다. )
정점 2과 0을 연결한 선분과 분할면을 검사하여 분할면에 걸쳤는지 판단한다. ( 분할면에 걸치지 않았으므로 나누지 않아도 된다 )
선분20은 분할면에 의하여 나눠지지 않아도 되므로 vFront에 정점 2를 넣는다. ( vFront : 0, 3, 4, 2 vBack : 3, 1, 4 )

위와 같은 과정으로 정점들을 구했다면 그릴 순서를 정해줘야 한다.
나 같은경우 Front 같은 경우 0->3->4, 0->4->2  Back 같은 경우 3->1->4 로 그린다.



위와 같이 그릴 때 다음과 같은 공통점이 있다.
01. 첫번째 그릴 정점은 저장소의 첫번 째 정점이다.
02. 처음 정점을 제외한 다음 정점들이 2개씩 묶어서 그린다.

그래서 나온 공식은 다음과 같다.
그리는 폴리곤 수 = 저장소에 있는 정점 수 - 2;


위와 같은 방식을 통하여 나는 폴리곤을 분할하는 방법을 만들었다.








반응형