-
Ase 파싱3D Graphics/공통 2007. 5. 7. 15:10728x90
Ase 파싱
Ase는 크게 3개의 단위로 이루어져 있다.
각 단위는 씬 정보(*SCENE), 재질 정보(*MATERIAL_LIST), 오브젝트 정보(*GEOMOBJECT)이며,
오브젝트 정보의 경우 추가로 몇 종이 더 있는데 주로 *HELPEROBJECT를 들 수 있다.이하 세부적으로 꼭 필요한 토큰만 언급하겠다.
//////////////////////////////////////////////////////////////////////////////////////
*SCENE
애니메이션과 관련된 정보를 담는다.*SCENE_FIRSTFRAME 0
애니메이션의 시작 프레임
*SCENE_LASTFRAME 100
애니메이션의 마지막 프레임
*SCENE_FRAMESPEED 30
초당 프레임
*SCENE_TICKSPERFRAME 160
프레임당 틱
애니메이션 1초당 틱 = 초당 프레임 * 프레임당 틱
대략 4800이며, 애니메이션 보간을 위한 기준값으로 사용된다.
//////////////////////////////////////////////////////////////////////////////////////
*MATERIAL_LIST
재질 및 텍스처에 관한 정보를 담는다. 토큰이 많지만 실제로 쓰이는 것은 극히 일부이다.
각 재질은 서브 재질을 가질 수 있다. 서브 재질은 또 서브 재질을 가질 수 있는 구조이지만
실제로 그러한 구조가 쓰이지도 않으며 허용되서도 안 된다.
각 재질은 오브젝트 별로 참조하며, 서브 재질은 페이스 별로 참조하게 된다.*MATERIAL_COUNT 1
총 재질 수
*MATERIAL 0 {
번호에 해당하는 재질의 묶음
*MATERIAL_NAME "Material #2"
재질 이름: 필요없지만, 필요할지도...
*MATERIAL_CLASS "Standard"
*MATERIAL_CLASS "Multi/Sub-Object"
재질 클래스: 현재 재질이 서브 재질을 포함하는지 여부를 나타낸다. "Standard"는 없고, "Multi..."는 있다.
지금으로써는 필요없다.
*MATERIAL_AMBIENT 0.1000 0.1000 0.1000
*MATERIAL_DIFFUSE 0.7000 0.7000 0.7000
*MATERIAL_SPECULAR 0.9000 0.9000 0.9000
앰비언트, 디퓨즈, 스펙큘라값
*NUMSUBMTLS 15
현재 재질이 가진 서브 재질의 개수. 서브 재질이 없으면 이 항목은 존재하지 않는다.
*SUBMATERIAL 0 {
번호에 해당하는 서브 재질의 묶음
// 중복 정보 생략. 재질과 출력되는 정보가 동일하다.
*MAP_DIFFUSE {
디퓨즈 맵: 여기서는 텍스처 정보만 필요하다.
*BITMAP "F:\Turret\Turret\Maps\T_Siren1.bmp"
텍스처 경로: 절대 경로이기 때문에 파일명만을 얻어와야 한다.
//////////////////////////////////////////////////////////////////////////////////////
*GEOMOBJECT
오브젝트에 관한 정보(버텍스, 인덱스, UV 등)를 담는다. 오브젝트는 트리 구조로 이루어질 수 있다.*NODE_NAME "Box01"
현재 오브젝트의 이름이다. 트리 구조에서 서로를 이름으로 참조하므로 중요한 값이다.
*NODE_PARENT "Box00"
부모 오브젝트의 이름이다. 계층을 이루지 않거나 지금 오브젝트가 부모라면 없는 항목이다.
*NODE_TM {
매트릭스 정보
*TM_ROW0 1.0000 0.0000 0.0000
*TM_ROW1 0.0000 1.0000 0.0000
*TM_ROW2 0.0000 0.0000 1.0000
*TM_ROW3 0.0000 0.0000 0.0000
4x3 매트릭스. 로테이션, 스케일, 트랜스폼이 적용되어 있다.
*TM_POS 0.0000 0.0000 0.0000
위 행렬의 4행과 같다.
*TM_ROTAXIS 0.0000 0.0000 0.0000
로테이션 축
*TM_ROTANGLE 0.0000
로테이션 값(회전각)
*TM_SCALE 1.0000 1.0000 1.0000
스케일 값
로테이션과 스케일을 행렬에서 분리해내기가 까다로우므로(불가능하지는 않은듯)
위 두 값을 따로 가지고 있는 편이 편할 수 있다.
이 값들의 실질적인 사용은 애니메이션을 설명할 때 다룬다.
}
*MESH {
매쉬 정보: 실제 오브젝트를 이루는 값들이다.
*MESH_NUMVERTEX 8
매쉬를 이루는 버텍스의 개수
*MESH_NUMFACES 12
페이스의 개수
*MESH_VERTEX_LIST {
버텍스 리스트
*MESH_VERTEX 0 -10.0000 -10.0000 0.0000
번호에 해당하는 버텍스의 좌표. x, z, y 순서이므로 dx에서는 두번째 세번째 값을 바꾸어 주어야 한다.
당연히 위의 *MESH_NUMVERTEX 개수 만큼 있다.
}
*MESH_FACE_LIST {
페이스 리스트
*MESH_FACE 0: A: 0 B: 2 C: 3 AB: 1 BC: 1 CA: 0 *MESH_SMOOTHING 2 *MESH_MTLID 1
번호에 해당하는 페이스의 정보.
페이스는 버텍스 3개로 이루어지는데 A:, B:, C: 뒤의 각 숫자가 버텍스 리스트의 해당 버텍스 인덱스이다.
감는 순서가 dx와 반대이므로 1, 3, 2 순서로 저장하여야 한다.
가장 뒤의 *MESH_MTLID는 서브 재질의 인덱스이다. 주의할 점은 잘못된 값이 들어갈 수 있으므로 검출 코드가 필요하다.
재질 정보와 텍스처를 교체하는 것은 비싼 연산이므로 참조하는 서브 재질의 번호로 정렬하여 렌더링한다. 또한 서브 재질이 없어도 이 값은 아무 값이나 존재하므로 서브 재질의 유무도 판별해야 한다.
}
*MESH_NUMTVERTEX 12
텍스처 uv 좌표의 개수
*MESH_TVERTLIST {
텍스처 uv 좌표 리스트
*MESH_TVERT 0 0.0000 0.0000 0.0000
번호에 해당하는 uv 좌표. 마지막 값은 버린다.
원점이 좌하단이므로 좌상단이 원점인 dx에서 쓰려면 v좌표를 1.0f-v로 보정해야 한다.
}
*MESH_NUMTVFACES 12
텍스처가 적용된 페이스의 개수
*MESH_TFACELIST {
페이스의 uv 좌표 리스트
*MESH_TFACE 0 9 11 10
번호에 해당하는 페이스의 uv 좌표 인덱스. 역시 1, 3, 2 순서로 적용하여야 한다.
}
*MESH_NUMCVERTEX 0
버텍스 컬러. 쓸 일이 있을까? 잘 모르겠다.
*MESH_NORMALS {
노멀
*MESH_FACENORMAL 0 0.0000 0.0000 -1.0000
페이스 노멀. 필요없는 값이지 싶다.
*MESH_VERTEXNORMAL 0 0.0000 0.0000 -1.0000
*MESH_VERTEXNORMAL 2 0.0000 0.0000 -1.0000
*MESH_VERTEXNORMAL 3 0.0000 0.0000 -1.0000
페이스를 이루는 버텍스의 노멀. 번호는 버텍스의 인덱스이다. 역시 x, z, y이므로 y, z 순서로 바꾸어 준다.
}
}
*TM_ANIMATION {
애니메이션에 관한 내용은 생략. 복잡한 내용이 연계되어 있으므로 나중에..
*NODE_NAME "Box01"
*CONTROL_POS_TRACK {
*CONTROL_POS_SAMPLE 0 0.0000 0.0000 0.0000
*CONTROL_POS_SAMPLE 800 7.8125 0.0000 0.0000
}
*CONTROL_ROT_TRACK {
*CONTROL_ROT_SAMPLE 800 -1.0000 0.0000 0.0000 0.2454
*CONTROL_ROT_SAMPLE 1600 -1.0000 0.0000 0.0000 0.5400
}
*CONTROL_SCALE_TRACK {
*CONTROL_SCALE_SAMPLE 0 1.0000 1.0000 1.0000 0.0000 0.0000 0.0000 0.0000
*CONTROL_SCALE_SAMPLE 800 1.1563 1.1563 1.1563 0.0000 0.0000 0.0000 0.0000}
}
*MATERIAL_REF 0
현재 오브젝트가 참조하는 재질의 번호.
}'3D Graphics > 공통' 카테고리의 다른 글
계층구조(Hierarchy) 적용시키는법 (0) 2007.05.11 ase뷰어 (0) 2007.05.09 open 물리 엔진 ODE 한글 메뉴얼 링크 (0) 2007.05.02 3D에서의 용어설명 (0) 2007.03.25 스케일링후 정점변환 적용시키기 (0) 2007.03.25