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;


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








'Develop > Map Tool 3D' 카테고리의 다른 글

2008. 12. 15. 작업일지  (0) 2008.12.16
2008. 12. 14. 작업일지  (0) 2008.12.14
2008. 12. 12. 작업일지  (0) 2008.12.12
2008.12.08. 작업일지  (0) 2008.12.08
2008.12.06. 작업일지  (0) 2008.12.06
2008. 12. 05. Indoor Polygon Divide Logic  (0) 2008.12.05
2008. 12. 05. Map Editor  (0) 2008.12.05
2008.12.03. MapEditor  (0) 2008.12.03
D3DCOLOR <-> COLORREF  (0) 2008.11.29
내부지형 구조체  (0) 2008.11.28
2008.11.20. MapEditor  (0) 2008.11.20
Posted by deviAk
TAG ,

댓글을 달아 주세요