ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • Ase 파싱
    3D Graphics/공통 2007. 5. 7. 15:10
    728x90

    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

    댓글

Designed by black7375.