파일 구조를 보면 ...
*3DSMAX_ASCIIEXPORT 200
*COMMENT "AsciiExport Version 2.00 - Sat Oct 28 00:53:15 2006"
*SCENE {
*SCENE_FILENAME "______ ________ ______ ____1.max"
*SCENE_FIRSTFRAME 0
*SCENE_LASTFRAME 600
*SCENE_FRAMESPEED 30
*SCENE_TICKSPERFRAME 160
*SCENE_BACKGROUND_STATIC 0.0000 0.0000 0.0000
*SCENE_AMBIENT_STATIC 0.0000 0.0000 0.0000
}
*COMMAND { }, *COMMAND data data 형식으로 저장되며
*SCENE_FILENAME "______ ________ ______ ____1.max"
한글 저장이 안된다는거... ㅡㅡㅋ
기본적인 구조는 인터넷에서 찾으면 많이 나온다.
허나 중요한건 무턱대고 한줄씩 읽으면 피 본다는거... -0-;
*COMMAND { } 이 형식이 중요하다.
우선은 버텍스와 인덱스 버퍼를 읽어서 화면이 뿌려보는것이 처음 할일이다.
*COMMAND { } 이 형식은 무시해야 한다. (아는게 없으므로...-_-;)
우선 모델은 *GEOMOBJECT {} 이넘이다.
이넘만 하나 남기고 싹지운 후에 다른이름 저장해주는 센스~!
(파일을 읽어서 Command처리 할때는 "*GEOMOBJECT " 마지막에 공백 넣어주는 센스까지..)
*GEOMOBJECT {
*NODE_NAME "Object02"
*NODE_PARENT "Group01"
*NODE_TM {
*NODE_NAME "Object02"
*INHERIT_POS 0 0 0
*INHERIT_ROT 0 0 0
*INHERIT_SCL 0 0 0
*TM_ROW0 0.6691 0.0000 0.7431
*TM_ROW1 0.0000 1.0000 0.0000
*TM_ROW2 -0.7431 0.0000 0.6691
*TM_ROW3 34.4167 0.0187 12.8975
*TM_POS 34.4167 0.0187 12.8975
*TM_ROTAXIS 0.0000 1.0000 0.0000
*TM_ROTANGLE 0.8378
*TM_SCALE 1.0000 1.0000 1.0000
*TM_SCALEAXIS 0.0000 0.0000 0.0000
*TM_SCALEAXISANG 0.0000
}
*MESH {
*TIMEVALUE 0
*MESH_NUMVERTEX 194 // 버텍스 수
*MESH_NUMFACES 336 // 인덱스 수
*MESH_VERTEX_LIST {
*MESH_VERTEX 0 42.0346 0.0187 2.0756 // Vertices Data
*MESH_VERTEX 1 45.9757 0.0187 6.4526
*MESH_VERTEX 2 41.4894 -3.2443 2.8501
*MESH_VERTEX 3 45.1484 -3.2443 6.9138
*MESH_VERTEX 4 39.1606 -2.9564 6.1584
*MESH_VERTEX 5 41.6148 -2.9564 8.8841
.
.중략
.
.보면 알겠지만 *MESH_VERTEX 1 45.9757 0.0187 6.4526
1번째 버텍스 x,y,z 값이다.
중요한것은 D3D가 왼손 좌표라서 y,z 값을 바꿔 줘야 한다.
왼손이건 오른손이건 왜 바꿔줘야 돼는지 모르겠다는 사람은 안바꿔도 된다.
다만 모델이 땅속으로 파고들려고 할 뿐이다. -_-;
*MESH_FACE_LIST { // Index data
*MESH_FACE 0: A: 0 B: 3 C: 2 AB: 0 BC: 1 CA: 1 *MESH_SMOOTHING 1 *MESH_MTLID 2
*MESH_FACE 1: A: 0 B: 1 C: 3 AB: 1 BC: 1 CA: 0 *MESH_SMOOTHING 1 *MESH_MTLID 2
*MESH_FACE 2: A: 2 B: 3 C: 5 AB: 1 BC: 1 CA: 0 *MESH_SMOOTHING 1 *MESH_MTLID 0
*MESH_FACE 3: A: 5 B: 4 C: 2 AB: 1 BC: 1 CA: 0 *MESH_SMOOTHING 1 *MESH_MTLID 0
*MESH_FACE 4: A: 4 B: 5 C: 7 AB: 1 BC: 1 CA: 0 *MESH_SMOOTHING 1 *MESH_MTLID 0
*MESH_FACE 5: A: 7 B: 6 C: 4 AB: 1 BC: 1 CA: 0 *MESH_SMOOTHING 1 *MESH_MTLID 0
*MESH_FACE 6: A: 8 B: 2 C: 9 AB: 0 BC: 1 CA: 1 *MESH_SMOOTHING 1 *MESH_MTLID 2
*MESH_FACE 7: A: 8 B: 0 C: 2 AB: 1 BC: 1 CA: 0 *MESH_SMOOTHING 1
.
.중략
.
*MESH_FACE 0: A: 0 B: 3 C: 2 AB: 0 BC: 1 CA: 1 *MESH_SMOOTHING 1
인덱스 데이터이다.
A: 0 B:3 C:2
이것만 읽으면 돼는데 이것도 역시 B,C의 순서를 바꿔줘야 한다.
역시 바꿀 이유를 모르겠다는 사람은 바꾸지 않아도 된다.
g_pd3dDevice->SetRenderState( D3DRS_CULLMODE, D3DCULL_CCW ); //은면제거
이것을 설정 했다면 모델이 안보일뿐....
끝에 붙은 *MESH_MTLID 이것은 텍스쳐와 관련 있다.
그래픽 해주는 사람한테 "한 오브젝트에는 하나의 텍스쳐만 사용해주세요" 라고 말했다면 패스~
허나.. 나는 백수....친구가 구해준 맥스 파일... *MESH_MTLID 을 사용한다 ㅠ_ㅠ
버넥스와 인덱스를 알았으면 주저말고 화면에 출력~ 출력~~
텍스쳐는 ASE 파일 분석 - 02 에서....
メDirect3Dメ게임프로그래밍-Justin K.
첫댓글 마지막에 오타가.. SMOOTHING 가 아니라 MESH_MTLID 수정해야 겠네..