Direct-X File Format

12. May. 1999   Documentation by (Interpreter)sidny119

DirectX File Format 의 구성

The Microsoft□ Direct X□ file format 은 context-free file format으로 구축되어 있다.  기본 구성은 template-driven 과 3D에서 사용되어지는 어떠한 지식과 연관지어지는 부분을 지양하려 한 것이다.  이file format 은 사용자 어플리케이션과 일반적으로 사용되어 Microsoft Direct3D□ Retained Mode에서 기하학적인 자료 그리고 프레임 구성, 애니메이션 등에 응용되어 진다.

그러면 이 x File Format 의 내용과 문법에 대한 내용을 알아본다

이 파일의  확장자는 Direct X Software Development Kit (SDK)에서 제공이 될 때  .x  로 되어 있다.

구성 형식에 대해 알아보자

Reserved Words  (예약어)

Header (선언부)

Comments (주석처리 부분)

Templates (사용되어지는 Data Type)

Data ( 일반 자료 )

Use of Commas and Semicolons (Separator; Data Token을 구분시키는 문자)

Reserved Words

아래의 것들은 대부분의 X File Format에 사용되어 진다.

ARRAY

BINARY

BINARY_RESOURCE

CHAR

CSTRING

DOUBLE

DWORD

FLOAT

SDWORD

STRING

SWORD

TEMPLATE

UCHAR

ULONGLONG

UNICODE

WORD

Header

파일의 구성하는 첫부분인 Header의 길이는 아주 강제적이다시피 틀에 맞추어 주어야 하는데 , 아래와 같다.

Type	Sub Type	Size	Contents	Content Meaning
Magic Number (required)		4 bytes	"xof "
Version Number (required)	Major Number	2 bytes	03	Major version 3
	Minor Number	2 bytes	02	Minor version 2
Format Type (required)		4 bytes	"txt "	Text File
			"bin "	Binary File
			"tzip"	MSZip Compressed Text File
			"bzip"	MSZip Compressed Binary File
Float size (required)		4 bytes	0064	64-bit floats
			0032	32-bit floats

Example

xof 0302txt 0064

Comments

Comments는 유일하게 text File Format 에서만 사용할 수 있다.  그리고 Text File Format 어느 부분이건 사용이 가능하며,   C++ style의  double-slashes "//"나 "#"로 가능하며 모든 Comments는 라인단위로 끝이 난다. 그러므로

다음라인에서 다시 Comment를 선언 해주어야 한다.

# This is a comment.

// This is another comment.

Templates

Templates 선언을 어떠한 방법으로 번역할 수 있을까?   이것은 Direct X File Format 내부에서 Template 의 정의에 의해서 Modulate 되는데 이 부분에서 Template의 표현 형태에 대해 이야기하기로 한다.

Template form

Template name

UUID

Members

Restrictions

Example을 통해 알아 볼수 있다.

Examples

Template form

Template 는 다음의 형태를 따르고 .있다

template &lt;template-name&gt; {

&lt;UUID&gt;

&lt;member 1&gt;;

...

&lt;member n&gt;;

[restrictions]

}

Template name

"_"(UnderBar)를 포함한 알파벳과 숫자를 사용하여 이름을 만들 수 있으며, 첫 글자는 숫자는를 사용 할수 없다.

UUID

A universally unique identifier (UUID) 는 open Software를 기반으로 하여 분포되어진 Computing 환경을 표준으로 초기화되어 진다. 그리고 이것은  angle brackets "<" and ">"을 사용하여  선언한다.

For example:

<3D82AB43-62DA-11cf-AB39-0020AF71E433>

Members

Template members 는 이미 적당한 이름으로 사용(선언) 및 명명되어져 있는 자료이거나,  이를 기반으로 한 배열 형태로 구성이 된다.

사용하는데 유효한 자료형태는 다음과 같다;

Type	Size
WORD	16 bits
DWORD	32 bits
FLOAT	IEEE float
DOUBLE	64 bits
CHAR	8 bits
UCHAR	8 bits
BYTE	8 bits
STRING	NULL-terminated string
CSTRING	Formatted C-string (currently unsupported)
UNICODE	UNICODE string (currently unsupported)

추가적으로 Template이 정의된 안쪽 블록에서 또다시 다른 Template를 정의 할 수 있다. 그러나 앞 부분의에서 정의한 것을 참조는 것은 불가능하다. 아래의 것은 Template의 정의를 아래 한줄로 표현 한 것으로, 기본문법이 된다.

array &lt;data-type&gt; &lt;name&gt;[&lt;dimension-size&gt;];

<dimension-size>는 Value가 치환이 되는 또다른 Template Member에 정수나 명칭이 부여된 또다른 참조 수식이다.

n차원배열은 꺽쇠 괄호 사이의 숫자에 의해 결정되어 지는 것으로, 일반적인 C와 유사하다.

example:

array DWORD FixedHerd[24];

array DWORD Herd[nCows];

array FLOAT Matrix4x4[4][4];

Restrictions

열려진 Template은 제한되거나 닫겨 진다. 이 제한들은 자료 유형들이 템플릿에 의해서 결정된 데이터 대상물의 immediate hierarchy에 나타날 지도 모르는 것을 결정한다.

어떤 열린 템플릿은 제한을 하지 못하는데,  닫힌 Template은 모든 자료 유형들을 받아들이지 못한다.  그리고 어떤 제한된 Template은 자료 유형들의 명칭이 붙여진 목록을 허락한다.

열려진 Template을 나타내는데, 그 문법은 Square Bracket에 의해서 둘러싸여진 3개의 점으로 표현 할수 있다.

[ ... ]

Square Bracket에 의해서 둘러싸여진 그들의 UUIDs에 의해서 선택적으로 연결된 명칭이 붙여진 자료 유형들은 콤마로서 여러 리스트를 표현할 수 있고  Comma로 분리된 목록에는 제한적인 템플릿을 표시한다.

[ { data-type [ UUID ] , }... ]

Closed Template 의 표시가 없는 형태.

Examples

template Mesh {

&lt;3D82AB44-62DA-11cf-AB39-0020AF71E433&gt;

DWORD nVertices;

array Vector vertices[nVertices];

DWORD nFaces;

array MeshFace faces[nFaces];

[ ... ]                // An open template

}

template Vector {

&lt;3D82AB5E-62DA-11cf-AB39-0020AF71E433&gt;

FLOAT x;

FLOAT y;

FLOAT z;

}                        // A closed template

template FileSystem {

&lt;UUID&gt;

STRING name;

[ Directory &lt;UUID&gt;, File &lt;UUID&gt; ]   // A restricted template

}

이것은 아주 특별한 경우의 Header 인데,  각 애플리케이션이 version 정보와 같은 템플릿을 정의하고 특수 용도 정보를 규정하기 위해 사용하는 것이 추천된다. 이것이 DirectX file format API 로 읽혀진다면 이Header는 꼭 있어 야 할 것이다.

Flag Member는 자료가 어떻게 읽혀야 하는지를 결정 지여 준다.  가령 Text화일과 Binary의 차이를 생각하면 될것이면 이것을 정의한다면 DWARD Type으로 해주어야 한다. 예컨데 이것이 bit가 Reset(0)일경우는 Binary 형태의 File일 것이며 Set되어 있다면(1)  이것은 Text형태의 자료임을 알 수 있으며, 다중 Header 일 경우는 이것이 Set와 Reset됨을 표현하므로서 한 파일 안에 Text와 Binary를 동시에 사용할수 있게 한다.

Data

Data Objects는 그 데이터에 실제 데이터 혹은 Reference를 포함한다. 개개의 자료 유형을 지정하는데 있어 이에 대응하는 Template을 가지고 있으며, Data objects 객체는 다음과 같은 형태를 지닌다.

&lt;Identifier&gt; [name] { [&lt;UUID&gt;]

&lt;member 1&gt;;

...

&lt;member n&gt;;

}

data objects에 대한 것들.

Identifier

Name

Members

Templates에 관한 .을 통해 충분히 이해할 수 있다.

Examples

Identifier

이 Part에서는 식별자의 필수 요건과 사용이전에 정의되어야  할 자료 혹은 기본 자료형이 Match 되야 하는 부분이다

Name

Optional Part로 앞부분을 참조 하기 바란다.

Members

Data Member에는   data object, data reference, integer list, float list, string list. 등과 같은 형태가 있다.

Data object

이 파일 포맷으로 표현된 여럿의 object들은 각각의 계층구조를 사용할 수 있게 한다. (예를 들어 동물의 몸과, 다리, 꼬리와, 머리, 등의 관계)   이로한 중첩된 object와 의 중첩은 제한이 가해지게 마련이다. 이러한 것에 대해 을 참조하면 확실해 질것이다.

Templates

Data reference

여러 Object와의 관계에서 선정되어진 Object의 참조로서 이에 대한  문법은 다음과 같다.

{

name |

UUID |

name UUID

}

Integer list

정수를 semicolon으로 분리 인식을 할 수 있다.

1; 2; 3;

Float list

float Data를 semicolon으로 분리 인식을 할 수 있다.

1.0; 2.0; 3.0;

String List

string을 semicolon으로 분리 인식을 할 수 있다.

"Moose"; "Goats"; "Sheep";

Use of Commas and Semicolons

Use of Commas and Semicolons은  아마도 Direct X에 내재된 아주 복잡하고 매우 엄격한 내용중에 하나이다.

; Comma 는 배열의 member를 분리 하는데 사용되면,   semicolons 은 Data의 끝을 알리는 Token이다

만일 Template이 정의될 경우 예를 보자.

template mytemp {

DWORD myvar;

}

이것은 Template처럼 보이는 Instance이다.

mytemp dataTemp {

1;

}

다른 템플릿을 내포하고 있는 템플릿은 아래와 같이 정의 된다.

template mytemp {

DWORD myvar;

DWORD myvar2;

}

template container {

FLOAT aFloat;

mytemp aTemp;

}

이것은 Template처럼 보이는 Instance이다.

container dataContainer {

1.1;

2; 3;;

}

Note that the second line that represents the mytemp inside container has two semicolons at the end of the line.

위은 예문에 두 번째 줄부터 시작하는 Data부의 Container안쪽에 MyTemp가 두 개의 Semicolon으로 끝을 맺음을 주시해야 한다.  그 첫번째  세미콜론은 데이터 항목의 끝, aTemp(Container이내에 ), 그리고 두번째 세미콜론이 Container의 결과를 표시하는 것을 나타낸다.

If an array is defined as:

Template mytemp {

array DWORD myvar[3];

}

이것은  위의 것과 같은 것 처럼 보이는 Instance이다.

mytemp aTemp {

1, 2, 3;

}

배열의 경우는 comma에 의해 그 자료를 구분 지을 수  있으므로  Data Item을 분리하는 semicolon이 필요하지 않다.  여기에서 끝에 붙은 하나의 semicolon은 배열의 끝을 알려주는 Token으로 쓰인 것이다.

Template에 의해 정의되어진 Data Item의 배열에 포함된 Template을 고려해보자

template mytemp {

DWORD myvar;

DWORD myvar2;

}

template container {

DWORD count;

array mytemp tempArray[count];

}

이것은 위의 것과 비슷한 Instance처럼 보인다.

container aContainer {

3;

1;2;,3;4;,5;6;;

}

DirectX File Templates

아래의 Appendix는 Microsoft□ Direct3D□ Retained Mode에 의해서 사용된 템플릿들을 목록에 나열한다.

특히, Direct3D Retained Mode 자료 유형들의 비슷한 형태로 구분 짖기 위해 정리한 것이다.

Template Name: Header

Template Name: Vector

Template Name: Coords2d

Template Name: Quaternion

Template Name: Matrix4x4

Template Name: ColorRGBA

Template Name: ColorRGB

Template Name: Indexed Color

Template Name: Boolean

Template Name: Boolean2d

Template Name: Material

Template Name: TextureFilename

Template Name: MeshFace

Template Name: MeshFaceWraps

Template Name: MeshTextureCoords

Template Name: MeshNormals

Template Name: MeshVertexColors

Template Name: MeshMaterialList

Template Name: Mesh

Template Name: FrameTransformMatrix

Template Name: Frame

Template Name: FloatKeys

Template Name: TimedFloatKeys

Template Name: AnimationKey

Template Name: AnimationOptions

Template Name: Animation

Template Name: AnimationSet

Template Name: Header

UUID

&lt;3D82AB43-62DA-11cf-AB39-0020AF71E433&gt;

Member Name	Type	Optional Array Size	Optional Data Objects
major	WORD		None
minor	WORD
flags	DWORD

Description

이 Template은 DirectX 파일 형식의 Direct3D Retained Mode 사용을 위해 특별한 용도의 정의를 위한 Header를 정의한다. 그 Retained Mode는 major를 사용한다. 그리고 minor Flags는현재의 major에 연동되어며, Retained Mode File Format을 위한 minor version 인 것이다.

Template Name: Vector

UUID

&lt;3D82AB5E-62DA-11cf-AB39-0020AF71E433&gt;

Member Name	Type	Optional Array Size	Optional Data Objects
x	FLOAT		None
y	FLOAT
z	FLOAT

Description

이 Template 은 Vector를 정의한다.

Template Name: Coords2d

UUID

&lt;F6F23F44-7686-11cf-8F52-0040333594A3&gt;

Member Name	Type	Optional Array Size	Optional Data Objects
u	FLOAT		None
v	FLOAT

Description

2 차원 벡터는 Mesh의 Texture 좌표를 정의하는데 사용한다.

Template Name: Quaternion

UUID

&lt;10DD46A3-775B-11cf-8F52-0040333594A3&gt;

Member Name	Type	Optional Array Size	Optional Data Objects
s	FLOAT		None
v	Vector

Description

현재는  사용하지 않는다.

Template Name: Matrix4x4

UUID

&lt;F6F23F45-7686-11cf-8F52-0040333594A3&gt;

Member Name	Type	Optional Array Size	Optional Data Objects
matrix	array FLOAT	16	None

Description

이 Template은 4*4Matrix로 정의 되며 Frame transformation matrix로 사용한다.

Template Name: ColorRGBA

UUID

&lt;F6F23F45-7686-11cf-8F52-0040333594A3&gt;

Member Name	Type	Optional Array Size	Optional Data Objects
red	FLOAT		None
green	FLOAT	10
blue	FLOAT
alpha	FLOAT

Description

이 Template은 alpha Component와 Color Object를 정의 한다. 이것은 material template 의  선언 안에 포함된 Face Color를 사용 하기 위한 것이다.

Template Name: ColorRGB

UUID

&lt;D3E16E81-7835-11cf-8F52-0040333594A3&gt;

Member Name	Type	Optional Array Size	Optional Data Objects
red	FLOAT		None
green	FLOAT
blue	FLOAT

Description

이것(template)은 기본이 되는 RGBcolor object를 정의 하기 위한 것이다..

Template Name: Indexed Color

UUID

&lt;1630B820-7842-11cf-8F52-0040333594A3&gt;

Member Name	Type	Optional Array Size	Optional Data Objects
index	DWARD
indexColor	ColorRGBA

Description

이 Template는 Index Parameter와 RGBAColor로 구성되어 있으며,  Mesh vertex color를 정의 하는데 사용한다.  Index의 정의는 그 색이 적용된 vertex를 정의하는 것이다.

Template Name: Boolean

UUID

&lt;4885AE61-78E8-11cf-8F52-0040333594A3&gt;

Member Name	Type	Optional Array Size	Optional Data Objects
DWORD	truefalse		None

Description

간단한 Boolena을 정의하는데 사용하며 이것은 0또는 1의 형태를 갖는다.

Template Name: Boolean2d

UUID

&lt;4885AE63-78E8-11cf-8F52-0040333594A3&gt;

Member Name	Type	Optional Array Size	Optional Data Objects
u	Boolean		None
v	Boolean

Description

이 Template는 두 개의 Boolean을 사용하여  개개의 Face의 Texture Topology를 정의하기 위해 MeshFaceWraps  template 에 사용된 두 개의 boolean의 1set을 규정한다.

Template Name: Material

UUID

&lt;3D82AB4D-62DA-11cf-AB39-0020AF71E433&gt;

Member Name	Type	Optional Array Size	Optional Data Objects
faceColor	ColorRGBA		Any
power	FLOAT
specularColor	ColorRGB
emissiveColor	ColorRGB

Description

이 Template은  기본적인 Material color를 정의 하는데 사용하는데 완전한 Mesh나 개개의 Mesh들이 갖고 있는 Face 들에 의해 적용된다. 이것의 power는  재질의 specular exponent 이다. 강조할점은 ambient color 는 alpha 요소들이 필요로 하다는 것이다.

TextureFilename 은  Direct3D Retained Mode에서  optional data object로 사용한다는 것이다. 만일 이 object가 존재 하지 않는다면 그 face는 texture Mapping이 되지 않는다.

Template Name: TextureFilename

UUID

&lt;A42790E1-7810-11cf-8F52-0040333594A3&gt;

Member Name	Type	Optional Array Size	Optional Data Objects
filename	STRING		None

Description

이 Template는  사용자가 Mesh나 Face에 texture mapping을 하기위해 texture file name을 명확하게 지정하여야 하는데  이 template는 material object안에서만 나타난다.

Template Name: MeshFace

UUID

&lt;3D82AB5F-62DA-11cf-AB39-0020AF71E433&gt;

Member Name	Type	Optional Array Size	Optional Data Objects
nFaceVertexIndices	DWORD		None
faceVertexIndices	array DWORD	nFaceVertexIndicies

Description

이 template는 Mesh Face를 정의하기위해 Mesh Template으로 사용한다. 개개의 nFaceVertexIndex array 참조는 Face를 만드는데 Mesh Vertex를  사용한다.

Template Name: MeshFaceWraps

UUID

&lt;4885AE62-78E8-11cf-8F52-0040333594A3&gt;

Member Name	Type	Optional Array Size	Optional Data Objects
nFaceWrapValues	DWORD		None
faceWrapValues	Boolean2d

Description

dl template는 각  Warpping 된 face의  texture mapping topology를 정의 하는데 사용한다. nFaceWrapValues member 값은 표면Mesh의 개수와 같아야만 한다는 것을 강조 한다.

Template Name: MeshTextureCoords

UUID

&lt;F6F23F40-7686-11cf-8F52-0040333594A3&gt;

Member Name	Type	Optional Array Size	Optional Data Objects
nTextureCoords	DWORD		None
textureCoords	array Coords2d	nTextureCoords

Description

이 template는 Mesh들의 texture mapping 좌표를 정의하는데 사용한다.

Template Name: MeshNormals

UUID

&lt;F6F23F43-7686-11cf-8F52-0040333594A3&gt;

Member Name	Type	Optional Array Size	Optional Data Objects
nNormals	DWORD		None
normals	array Vector	nNormals
nFaceNormals	DWORD
faceNormals	array MeshFace	nFaceNormals

Description

이 Template는 Mesh의 Normal vector를 정의하는데 사용한다. vector의 첫번째 배열은 normal Vector 그것 자체를 나타내고, 두 번째 배열은 어떤 Normal vector들을 통해  지정한 index들의 배열이 주어진 Face를 만들이내는데 적용한다는 것이다. nFaceNormals member 의 값들은 Mesh가 갓고 있는 Face의 개수와 같다는 것이다.

Template Name: MeshVertexColors

UUID

&lt;1630B821-7842-11cf-8F52-0040333594A3&gt;

Member Name	Type	Optional Array Size	Optional Data Objects
nVertexColors	DWORD		None
vertexColors	array IndexedColor	nVertexColors

Description

이 template는 Mesh를 위한 vertex color지정한는 것으로 개개의 Mesh 또는 개개의 Face 재질을 지정하는 것을 대신한다.

Template Name: MeshMaterialList

UUID

&lt;F6F23F42-7686-11cf-8F52-0040333594A3&gt;

Member Name	Type	Optional Array Size	Optional Data Objects
nMaterials	DWORD		Material
nFaceIndexes	DWORD
FaceIndexes	array DWORD	nFaceIndexes

Description

이 Template는 face 로부터 구성되어져 있는 재질을  Mesh Object로 적용시키는데 사용된다.  nMaterials member 는 많은 Material을 어떻게 표현할것인가, 그리고 재질을 재질 그자체로 어떻게 적용시킬수 있을 것인가를 명확히 제시 한다.

Template Name: Mesh

UUID

&lt;3D82AB44-62DA-11cf-AB39-0020AF71E433&gt;

Member Name	Type	Optional Array Size	Optional Data Objects
nVertices	DWORD		Any
vertices	array Vector	nVertices
nFaces	DWORD
faces	array MeshFace	nFaces

Description

이 template는 간단한 Mesh를 정의한다. 첫 번째 배열을 vertex list로 구성되고, 두 번째 list는 face를 구성하는데 vertex list로부터 순서를  부여해 나가게  한다.

Optional Data Elements

아래의 것은 optional data 요소로 Direct3D Retained Mode에서 사용된다.

MeshFaceWraps	If this is not present, wrapping for both u and v defaults to false.
MeshTextureCoords	If this is not present, there are no texture coordinates.
MeshNormals	If this is not present, normals are generated using the GenerateNormals method of the API.
MeshVertexColors	If this is not present, the colors default to white.
MeshMaterialList	If this is not present, the material defaults to white.

Template Name: FrameTransformMatrix

UUID

&lt;F6F23F41-7686-11cf-8F52-0040333594A3&gt;

Member Name	Type	Optional Array Size	Optional Data Objects
frameMatrix	Matrix4x4		None

Description

이 template는 frame을 위한 부분적인  transform을 정의한다( child objects 포함).

Template Name: Frame

UUID

&lt;3D82AB46-62DA-11cf-AB39-0020AF71E433&gt;

Member Name	Type	Optional Array Size	Optional Data Objects
None			Any

Description

이 template 은 frame을 정의해 준다.  즉, 해당 frame을 Mesh 형태의 Object와 FrameTransformMatrix를 포함하게 한다고 하고 될것이다.

Optional Data Elements

이것은 optional data 로 Direct3D Retained Mode의해 사용된다.

FrameTransformMatrix	If this element is not present, no local transform is applied to the frame.
Mesh	Any number of mesh objects that become children of the frame. These objects can be specified inline or by reference.

Template Name: FloatKeys

UUID

&lt;10DD46A9-775B-11cf-8F52-0040333594A3&gt;

Member Name	Type	Optional Array Size	Optional Data Objects
nValues	DWORD		None
values	array FLOAT	nValues

Description

이 template 는 floating-point와 배열안에서  float의 개수를 정의하는데 사용한다. animation Key의 집합을 정의하는 것이라 생각하면 된다.

Template Name: TimedFloatKeys

UUID

&lt;F406B180-7B3B-11cf-8F52-0040333594A3&gt;

Member Name	Type	Optional Array Size	Optional Data Objects
time	DWORD		None
tfkeys	FloatKeys

Description

이 template는 float의 set과 animation에사용되는 Posive time을 지정하는데 사용한다.

Template Name: AnimationKey

UUID

&lt;10DD46A8-775B-11cf-8F52-0040333594A3&gt;

Member Name	Type	Optional Array Size	Optional Data Objects
keyType	DWORD		None
nKeys	DWORD
keys	array TimedFloatKeys	nKeys

Description

이 template는 animation key의 set을 정의하는데 사용한다.  key형태의 member는 회전될 때나 확대될 때 지정되어 진다.( 0, 1, 나 2 와 같은 정수 형태를 사용).

Template Name: AnimationOptions

UUID

&lt;E2BF56C0-840F-11cf-8F52-0040333594A3&gt;

Member Name	Type	Optional Array Size	Optional Data Objects
openclosed	DWORD		None
positionquality	DWORD

Description

이 template는 사용자가 Direct3D Retained Mode Animation options을 설정할 때  이 설정을 가능케 한다. 여기에서  openclosed member 는 닫혀 있을 때을 0으로 그리고 열려 있을 때에는 1로 animation을 설정하게 하는 것을 가능하게 하는 것이다.  positionquality member는 지정된 어떠한 위치 키에 대한 위치 quality를 설정하고 있던 spline 위치를 위해 0 혹은 linear 위치를 위한 1의 key를  위하여 사용된다. 여기에서 default 값은 closed이다.

Template Name: Animation

UUID

&lt;3D82AB4F-62DA-11cf-AB39-0020AF71E433&gt;

Member Name	Type	Optional Array Size	Optional Data Objects
None			Any

Description

이 template는 이전의 frame의 참조하데  단하나의 참조할 수 있는 animation을 갖고 있다.그것은 frame과 적어도 의 단하나 이상의 참조를 갖고 있다. 이것은 AnimationOptions data object까지도 포함을 한다.

AnimationKeys

Optional Data Elements

이것은 optional data elements로 Direct3D Retained Mode에서 사용되어 지는 것이다.

AnimationKey	An animation is meaningless without AnimationKeys.
AnimationOptions	If this element is not present, an animation is closed.

Template Name: AnimationSet

UUID

&lt;3D82AB50-62DA-11cf-AB39-0020AF71E433&gt;

Member Name	Type	Optional Array Size	Optional Data Objects
none			Animation

Description

AnimationSet template 은 하나 또는 그이상의  Animation objects를 포함하며.  이것은 Direct3D Retained Mode 에서의 animation set에 개념과 동일하다. 이것은 nimation 내부에 각 animation이 어떠한 주어진 점에 같은 시간을 가지고 있던 것을 의미한다. animation의 set time을 증가시키는 것은 그것이 담고 있는 모든 animationemf의 시간을 늘리는 것과 동일한 효과라 할수 있겠다.

DirectX File Cube Example

이부분에서는 cube sample을 보이므로서 어떻게 texture를 부가하는지, 그리고 어떠한 방법으로  animation을 나타내는지, 알수있을 것이다.

A Simple Cube

Adding Textures

Frames and Animations

A Simple Cube

이 file 은 간단한 cube을 정의한것인데 붉은색의 4개면과 두 개의 푸른 면을 보여준 것이다. 주시할 점은  이 file은 optional information이 Mesh template에 의해 정의 내려진 추가정보로 사용되어졌다는 것이다.

-- SOURCE CODE START

Material RedMaterial {

1.000000;0.000000;0.000000;1.000000;;    // R = 1.0, G = 0.0, B = 0.0

0.000000;

0.000000;0.000000;0.000000;;

0.000000;0.000000;0.000000;;

}

Material GreenMaterial {

0.000000;1.000000;0.000000;1.000000;;     // R = 0.0, G = 1.0, B = 0.0

0.000000;

0.000000;0.000000;0.000000;;

0.000000;0.000000;0.000000;;

}

// Define a mesh with 8 vertices and 12 faces (triangles). Use

// optional data objects in the mesh to specify materials, normals,

// and texture coordinates.

Mesh CubeMesh {

8;                                // 8 vertices

1.000000;1.000000;-1.000000;,     // vertex 0

-1.000000;1.000000;-1.000000;,    // vertex 1

-1.000000;1.000000;1.000000;,     // etc...

1.000000;1.000000;1.000000;,

1.000000;-1.000000;-1.000000;,

-1.000000;-1.000000;-1.000000;,

-1.000000;-1.000000;1.000000;,

1.000000;-1.000000;1.000000;;

12;                      // 12 faces

3;0,1,2;,                // face 0 has 3 vertices

3;0,2,3;,                // etc...

3;0,4,5;,

3;0,5,1;,

3;1,5,6;,

3;1,6,2;,

3;2,6,7;,

3;2,7,3;,

3;3,7,4;,

3;3,4,0;,

3;4,7,6;,

3;4,6,5;;

// All required data has been defined. Now define optional data

// using the hierarchical nature of the file format.

MeshMaterialList {

2;                    // Number of materials used

12;                   // A material for each face

0,                    // face 0 uses the first

0,                    // material

0,

0,

0,

0,

0,

0,

1,                    // face 8 uses the second

1,                    // material

1,

1;;

{RedMaterial}         // References to the definitions

{GreenMaterial}       // of material 0 and 1

}

MeshNormals {

8;                    // define 8 normals

0.333333;0.666667;-0.666667;,

-0.816497;0.408248;-0.408248;,

-0.333333;0.666667;0.666667;,

0.816497;0.408248;0.408248;,

0.666667;-0.666667;-0.333333;,

-0.408248;-0.408248;-0.816497;,

-0.666667;-0.666667;0.333333;,

0.408248;-0.408248;0.816497;;

12;                   // For the 12 faces,

3;0,1,2;,             // define the normals

3;0,2,3;,

3;0,4,5;,

3;0,5,1;,

3;1,5,6;,

3;1,6,2;,

3;2,6,7;,

3;2,7,3;,

3;3,7,4;,

3;3,4,0;,

3;4,7,6;,

3;4,6,5;;

}

MeshTextureCoords {

8;                        // Define texture coords

0.000000;1.000000;        // for each of the vertices

1.000000;1.000000;

0.000000;1.000000;

1.000000;1.000000;

0.000000;0.000000;

1.000000;0.000000;

0.000000;0.000000;

1.000000;0.000000;;

}

}

-- SOURCE  CODE  END

Adding Textures

To add textures, use the hierarchical nature of the file format and add an optional TextureFilename data object to the Material data objects. So, the Material objects now read as follows:

Material RedMaterial {

1.000000;0.000000;0.000000;1.000000;;    // R = 1.0, G = 0.0, B = 0.0

0.000000;

0.000000;0.000000;0.000000;;

0.000000;0.000000;0.000000;;

TextureFilename {

"tex1.ppm";

}

}

Material GreenMaterial {

0.000000;1.000000;0.000000;1.000000;;     // R = 0.0, G = 1.0, B = 0.0

0.000000;

0.000000;0.000000;0.000000;;

0.000000;0.000000;0.000000;;

TextureFilename {

"win95.ppm";

}

}

Frames and Animations

This section shows how to add frames and animations to a simple cube.

Frames

AnimationSets and Animations

Frames

A frame is expected to take the following structure:

Frame Aframe {        // The frame name is chosen for convenience.

FrameTransformMatrix {

...transform data...

}

[ Meshes ] and/or [ More frames]

}

Place the previously defined cube mesh inside a frame with an identity transform. Then apply an animation to this frame.

Frame CubeFrame {

FrameTransformMatrix {

1.000000, 0.000000, 0.000000, 0.000000,

0.000000, 1.000000, 0.000000, 0.000000,

0.000000, 0.000000, 1.000000, 0.000000,

0.000000, 0.000000, 0.000000, 1.000000;;

}

{CubeMesh}        // You could have the mesh inline, but this

// uses an object reference instead.

}

AnimationSets and Animations

Animations and AnimationSets in the DirectX file format map directly to the Direct3D Retained Mode animation concepts.

Animation Animation0 {        // The name is chosen for convenience.

{ Frame that it applies to&amp;em;normally a reference }

AnimationKey {

...animation key data...

}

{ ...more animation keys... }

}

Animations are then grouped into AnimationSets: AnimationSet AnimationSet0 { // The name is chosen for convenience. { an animation□could be inline or a reference } { ... more animations ... } }

Now take the cube through an animation.

AnimationSet AnimationSet0 {

Animation Animation0 {

{CubeFrame}    // Use the frame containing the cube

AnimationKey {

2;             // Position keys

9;             // 9 keys

10; 3; -100.000000, 0.000000, 0.000000;;,

20; 3; -75.000000, 0.000000, 0.000000;;,

30; 3; -50.000000, 0.000000, 0.000000;;,

40; 3; -25.500000, 0.000000, 0.000000;;,

50; 3; 0.000000, 0.000000, 0.000000;;,

60; 3; 25.500000, 0.000000, 0.000000;;,

70; 3; 50.000000, 0.000000, 0.000000;;,

80; 3; 75.500000, 0.000000, 0.000000;;,

90; 3; 100.000000, 0.000000, 0.000000;;;

}

}

}