[2008. 12. 12 작업일지]

BSP 내부지형 자동 분할 기능을 제작 하던 중 맵 툴의 전반적인 수정이 필요하다는 결론을 내렸습니다.
지형 맵이 큰데다가 로직이 잘 못 되었는지 2진트리를 타고 들어가는 재귀호출하다가 스택 오버플로어가 일어 나더군요.
일단은 주말 동안 풀버닝으로 다른 구조와 형태로 맵에디터를 제작 하려 합니다. ( 이미 작업 시작 했음 )

3D Max 를 신뢰 했다 된통 당했습니다.

1. 그래픽 디자이너가 만들어준 지형이 유닛 단위가 cm 에서는 일치 하였지만 mm 단위에서 0.000 단위의 오차가 생깁니다.
일단 위의 오차는 자체 포맷으로 익스포터 된 데이터를 로더 할 때 소수점 첫번째 자리에서 반올림으로 처리하기로 결정냈습니다.

2. 왜인지는 모르겠지만 노말값이 0.0f, 0.0f, 0.0f 인 데이터가 있다는 점입니다.
노말값이 없는 데이터 때문에 분할할때 이 면을 나눌면으로 잡혀서 무한루프 도는 현상을 발견했습니다.
이 또한 로더에서 노말값이 없는 데이터는 읽지 않도록 처리 하기로 결정 냈습니다.


최종 결론은 일단 주말동안 툴 새로운 로직으로 새로 작업 하기로 결정.

현재 생각 중인 새로운 로직은 2가지 정도
1. BSP 보단 툴에서 포탈을 생성하여 포탈형 배열 구조로의 변경
2. BSP 로직 수정 및 포탈형 구조도 포함 ( 원래 하려 했던 계획 PVS 까지... )

'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

[2008. 12. 08 작업일지]

오늘은 BSP가 이상하게 작동하여 하루종일 그것만 보느라 삽질 하였다.

같은 평면에 있으며 노말 방향이 같은데도 어느쪽은 Front 노드에 어느쪽은 Back Node에 넣어지는 버그를 발견 한 것이다.

처음에는 내 쪽 처리가 문제인가 하고 보았다.

하지만 테스트용으로 만들었던 맵 파일은 제대로 분할이 되는거 였다...

그래서 맵 데이타 파일을 보았다...

이럴 수가 맵 파일 수치가 약간씩 오차가 생겨 있는 것이다.

#MESH_FACENORMAL 123    -0.0000    1.0000    0.0000         // 페이스 노말
       400.0001    -2649.8442    0.0000     -0.0000    1.0000    0.0000     // Vertex X, Y, Z   Normal
       400.0000    -2649.8442    110.0000     -0.0000    1.0000    0.0000    // Vertex X, Y, Z   Normal
       850.0000    -2649.8442    110.0000     -0.0000    1.0000    0.0000    // Vertex X, Y, Z   Normal

위와 같이 400.0001 과 400.0000 으로 오차가 생기면서 뽑히는 것이다.

맥스 파일을 확인 하였지만 맥스상 수치는 동일 하였다..

이것 때문에 하루종일 보다가 결국 GG치고 방에 돌아와 2시간 삽질하다 혹 Unit Scale 을 바꿔볼까 하고 바꿔보았다..

아뿔사... 기존의 맵 데이터는 cm 단위로 제작이 되었는데... mm 단위로 바꿔보니.. 0.003 만큼 오차가 있는게 아닌가!!!!!

후... 저 오차 때문에 오늘 하루종일 삽질....

일단 밤새서 프로그램 적으로 처리 할 수 있음 처리 하도록 해보고... 안되면 어쩔수 없이...

그래픽 재희형에게 AS 부탁해야겠는데... 맵이 워낙 크니..-_-;;; 재희형 고생 하시겠네....

( 2008년 12월 08일 오후 11시 25분 )

대충 프로그램 적으로 수정이 된 것 같다.
맥스 익스포터에서 정점을 출력할때 소수점 4째자리에서 반올림을 한 값을 출력하도록 수정 하였다.



'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
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
2008/12/05 - [Ψ Develop/Δ Map Tool 3D] - 2008. 12. 05. Indoor Polygon Divide Logic


BSP 분할에 대한 처리를 완료 하였다.

이전 까지는 나눌 면과 겹치는 면에 대한 자르는 부분이 추가가 되지 않아 임시로 Front, Back 노드 두 곳에 넣어 놨었다.

그리고 오늘 면 분할기능을 추가하여 제대로 된 BSP 분할을 처리 하였다.

위의 사진은 공간 분할을 하기 전의 이미지 이다. ( 텍스처는 졸작 기획자 정현이형의 좀비 사진인지라 모자이크 처리... )

왼쪽 상단에 보면 WALL #0 ~ 3 까지 총 4개의 폴리곤으로 구성이 되어 있다.


분할 이후 Front Node의 모습이다.

Front 노드의 폴리곤 수는 총 5개 이다.


분할 이후의 Back Node 의 모습이다.


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

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
Map Tool 제작에 앞서...  (0) 2008.08.07
posted by deviAk

2008.12.03. MapEditor

Develop/Map Tool 3D 2008.12.03 04:13

현재까지 Map Editor 진행 상황

BSP 공간 분할에 대한 작업을 하고 있다.

일단 분할면을 기준으로 앞, 뒤의 폴리곤 들은 제대로 분류가 가능하나 겹치는 부분에 대한 처리를 하지 않았다.

또한 트리를 이용하여 Node 정보를 보여주며 노드나 폴리곤 선택시 그 부분만 출력이 가능 하도록 제작 완료.

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

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
Map Tool 제작에 앞서...  (0) 2008.08.07
posted by deviAk