青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

天行健 君子當自強而不息

Using the .X File Format(1)

Your 3D meshes need a place to liverather, you need a place to store your 3D mesh data (not to mention all that other data your game project requires). What's a developer to do−develop his own file format or go with a third−party format? With so many popular formats out there, it's an easy choice to make, but what about the restrictions some formats impose? Why can't you just use somebody else's file format and configure it to work the way you want?

That somebody else is none other than Microsoft, and the format to use is .X! Now uncross those eyes, mister−those .X files are really easy to use once you understand them, and this chapter will teach you what you need to know.

 

Working with .X Templates and Data Objects

If you haven't already, I invite you to take a look at one of those mysterious .X files that comes packaged with the DirectX SDK (located in the \Samples\Multimedia\Media directory of your DirectX install). Go on, I dare you. More than likely, you'll be greeted with something like this:

xof 0302txt 0032
template Header {
<3D82AB43−62DA−11cf−AB39−0020AF71E433>
DWORD major;
DWORD minor;
DWORD flags;
}
template Frame {
<3D82AB46−62DA−11cf−AB39−0020AF71E433>
[FrameTransformMatrix]
[Mesh]
}
Header {
1;
0;
1;
}
Frame Scene_Root {
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;;
}
	Frame Pyramid_Frame {
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;;
}
		Mesh PyramidMesh {
5;
0.00000;10.00000;0.00000;,
−10.00000;0.00000;10.00000;,
10.00000;0.00000;10.00000;,
−10.00000;0.00000;−10.00000;,
10.00000;0.00000;−10.00000;;
6;
3;0,1,2;,
3;0,2,3;,
3;0,3,4;,
3;0,4,1;,
3;2,1,4;,
3;2,4,3;;
			MeshMaterialList {
1;
6;
0,0,0,0,0,0;;
				Material Material0 {
1.000000; 1.000000; 1.000000; 1.000000;;
0.000000;
0.050000; 0.050000; 0.050000;;
0.000000; 0.000000; 0.000000;;
}
}
}
}
}

Scary looking, isn't it? Actually, you can break down every .X file into a small handful of easy−to−manage components, which makes the files easy to understand and process. Let me explain what I mean. Every .X file starts with a small header, which in the preceding example looks like this:

xof 0302txt 0032

This small blurb of text informs programs that load the file that it is indeed an .X file. (The xof portion signifies an .X file.) It also informs programs that the file uses the DirectX .X file version 3.2 templates (represented by the 0302 text). Following the version number is txt, which signifies that all of the following .X data is stored in a text format as opposed to a binary format. The line of text ends with 0032, which defines the number of bits reserved for floating−point values (0032 for 32−bit or 0064 for 64−bit).

Note Binary, a second .X file storage format, is useful for compacting data into a format that is unreadable by humans. I won't discuss the binary format; however, the techniques used to process .X files in this chapter still apply to binary .X files, so don't worry about missing out on any good stuff!

After the file header there are a slew of data chunks, referred to as templates and data objects. You can tell the difference between a template and a data object because all templates begin with the word template. As you can see from the .X file code, templates look much like a C structure definition. Data objects are instances of those templates.

You use templates to define the information that data objects contain in the .X file. (A template defines the layout of a data object.) Each template can contain any type of data defined by a small set of data types, and any combination of data types can be used inside a template. A data object is merely an instance of a template. You can think of a template much like a C++ class−they both define the data that an instance of the object can contain.

Taking another look at the example .X file, you can see that the first template you'll encounter is Header, which is the template's class name. The Header template contains three DWORD values (as well as a large number called a GUID, which is enclosed in angle brackets), which you set when you create a data object from the template. Creating data objects is much like instancing a class or structure. In the previous .X file code, the instancing of the Header template looks like this:

Header {
  1; // major
  0; // minor
  1; // flags
}

Notice that you must define every variable contained in the Header template in your data object, and in the same order. You might be wondering about that large number (the template's GUID) defined in the template, however. What does that have to do with instancing your template? Nothing, actually, because DirectX uses that large number to identify templates as they are loaded. I'll get back to the template GUID (Globally Unique Identification Number) in a moment.

Tip Much like C/C++, you can also use the handy // operator to signify comments in your .X file.

The next template you'll see in the .X file is Frame. This is a special template−it doesn't define any data types, but it does reference other template classes. The other template classes, enclosed in square brackets, are named FrameTransformMatrix and Mesh. Using this manner of referencing other templates from within a template, you can create a hierarchy of data objects.

Also, by declaring additional templates within another template, you are creating a set of template restrictions, which enable you to create templates that only allow specific data objects to be embedded within another data object. In this case, only the data objects of the type FrameTransformMatrix and Mesh can be embedded in a Frame data object. You'll read more about template restrictions later in this chapter. For now, move on to examining the rest of the .X file.

Following the template definitions (which should also be at the beginning of the .X file) are the data objects. These are declared much like C data structures would be−you instance the structure by its template class name, followed by the data object's instance name. The instance name is optional, however, so don't worry if you come across some data objects that are missing it.

In the .X file you're examining, the first data object has an instance name of Scene_Root. The Scene_Root object is of the template class type Frame. You've already seen the Frame template defined. Looking back to that template definition, you can see that there is no data to store, but there are two optional data objects you can embed in Frame−FrameTransformMatrix and Mesh.

Just by a matter of luck, both a FrameTransformMatrix and a Mesh data object are embedded in Scene_Root. Missing from the .X file, however, are the template definitions for FrameTransformMatrix and Mesh. How are you supposed to know what data those objects contain? Well, an .X file doesn't have to define every template with the file itself−you can define those template definitions inside your program!

You'll get to see how to define these templates within your programs later in this chapter. For now, let's get back to the example. A data object of the template class type FrameTransformMatrix is embedded in the Scene_Root data object. This data object contains floating−point values that represent a transformation matrix. After that data object there is another data object of the template class type Mesh, which contains information about a mesh.

Okay, enough of this example−I'm sure you're getting the gist of it. As you can see, templates are completely user−defined, meaning that you can create any type of template to contain any type of data. Want to contain raw sound data in an .X file? How about storing heartbeat−sensor readings? Using .X, you can store sound data, heartbeat readings, and any other type of data you want!


posted on 2008-04-16 18:37 lovedday 閱讀(755) 評論(1)  編輯 收藏 引用

評論

# re: Using the .X File Format(1) 2010-11-16 23:38 可耕地

抄書嗎?  回復  更多評論   


只有注冊用戶登錄后才能發表評論。
網站導航: 博客園   IT新聞   BlogJava   博問   Chat2DB   管理


公告

導航

統計

常用鏈接

隨筆分類(178)

3D游戲編程相關鏈接

搜索

最新評論

青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            欧美激情久久久久| 欧美专区日韩专区| 欧美人与禽性xxxxx杂性| 亚洲二区三区四区| 欧美激情精品久久久| 男女精品网站| 一区二区三区免费网站| 99视频精品免费观看| 欧美性色视频在线| 久久成年人视频| 久久久精品999| 亚洲看片网站| 亚洲亚洲精品在线观看| 国产午夜精品视频| 欧美承认网站| 欧美视频第二页| 久久久999精品| 欧美顶级艳妇交换群宴| 亚洲综合首页| 久久久精品日韩| 999在线观看精品免费不卡网站| 亚洲最快最全在线视频| 国内伊人久久久久久网站视频| 欧美va天堂在线| 欧美日韩国产一区二区三区地区| 亚洲一级特黄| 久久亚洲视频| 午夜久久影院| 欧美大片免费观看| 欧美一区二区三区四区在线观看地址| 久久精品视频99| 亚洲一区国产视频| 久久免费观看视频| 亚洲欧美福利一区二区| 久久综合狠狠综合久久激情| 亚洲欧美另类综合偷拍| 欧美不卡视频| 久久久.com| 国产精品高清免费在线观看| 欧美成人首页| 国产亚洲一二三区| 一区二区久久久久久| 在线欧美三区| 午夜精品视频网站| 亚洲一区二区三区四区在线观看| 久久久99免费视频| 欧美在线看片a免费观看| 欧美日韩精品一二三区| 欧美大学生性色视频| 国产亚洲精品福利| 亚洲综合三区| 一区二区三区国产精品| 欧美aⅴ99久久黑人专区| 久久综合久久美利坚合众国| 国产精品视频网址| 制服丝袜激情欧洲亚洲| 一区二区激情视频| 欧美激情一区二区在线 | 亚洲午夜激情网页| 免费在线观看日韩欧美| 美女爽到呻吟久久久久| 国产午夜精品久久久| 午夜精品久久久久久99热软件| 亚洲性感美女99在线| 欧美黑人在线播放| 亚洲国产精品va| 亚洲第一页中文字幕| 久久青草欧美一区二区三区| 久久青青草综合| 一区二区在线观看视频在线观看| 亚洲免费在线观看视频| 欧美中文在线观看| 国产亚洲精品高潮| 久久久人成影片一区二区三区| 久久综合色一综合色88| 亚洲成人影音| 嫩草成人www欧美| 亚洲精品视频中文字幕| 在线视频欧美日韩精品| 国产精品草莓在线免费观看| 亚洲一区二区三区精品视频| 欧美影院成人| 在线日韩欧美视频| 欧美电影在线观看| 在线视频亚洲一区| 久久久国产精品一区二区中文| 精品99一区二区三区| 久久综合综合久久综合| 亚洲六月丁香色婷婷综合久久| 亚洲综合导航| 一区二区三区在线免费视频 | 亚洲精品美女| 亚洲一线二线三线久久久| 国产欧美日韩在线视频| 久久免费视频在线观看| 亚洲人成在线播放| 亚洲欧美激情四射在线日 | 欧美视频观看一区| 午夜精品一区二区三区四区 | 欧美成人综合一区| 99精品免费| 国产欧美日韩综合一区在线观看 | 六月天综合网| 在线亚洲一区| 欧美chengren| 午夜精品区一区二区三| 亚洲国产精品成人一区二区 | 在线日韩成人| 国产精品久久久99| 免费观看日韩av| 亚洲女同同性videoxma| 欧美成人黑人xx视频免费观看| 亚洲色图自拍| 在线观看精品视频| 国产精品久久久久久久久久三级 | 欧美午夜一区二区三区免费大片| 欧美一区二区三区免费观看| 亚洲精品美女免费| 麻豆av一区二区三区| 亚洲愉拍自拍另类高清精品| 亚洲国产精品免费| 国产欧美日韩另类一区| 欧美日韩免费观看一区三区| 久久久综合网站| 亚洲欧美亚洲| 在线综合+亚洲+欧美中文字幕| 欧美福利视频一区| 久久三级福利| 久久国产精品久久久| 亚洲天天影视| 一区二区日韩精品| 亚洲区第一页| 亚洲国产欧美在线人成| 国产一区二区三区奇米久涩| 国产精品久久久久久久app| 久久夜色精品国产欧美乱| 一本色道久久88精品综合| 国产精品九色蝌蚪自拍| 欧美福利电影网| 亚洲精品国产日韩| 亚洲成色777777女色窝| 国产一级久久| 国产亚洲成年网址在线观看| 国产精品人人爽人人做我的可爱 | 蜜臀久久99精品久久久画质超高清| 午夜精品久久久| 亚洲欧美一区二区视频| 亚洲自拍都市欧美小说| 亚洲欧美精品suv| 午夜在线不卡| 久久国产欧美精品| 久久精品91久久香蕉加勒比| 久久精品夜色噜噜亚洲aⅴ| 久久不见久久见免费视频1| 欧美在线免费| 久久午夜影视| 欧美福利小视频| 欧美伦理视频网站| 国产精品久久久久影院亚瑟| 国产精品久久毛片a| 国产欧美日韩精品一区| 一区二区高清| 亚洲欧美激情视频| 久久av老司机精品网站导航| 久久永久免费| 欧美日韩国产首页| 国产精品久久久久久久久| 国产亚洲精品aa| 亚洲韩国青草视频| 亚洲视频导航| 久久岛国电影| 亚洲国产精品成人| 国产精品99久久久久久久久久久久 | 激情综合色综合久久| 亚洲精品乱码久久久久久久久 | 精品不卡一区二区三区| 亚洲三级影片| 欧美一二三视频| 欧美二区视频| 亚洲制服丝袜在线| 久热爱精品视频线路一| 欧美日韩在线观看一区二区| 国产主播精品| 一本一本久久a久久精品综合麻豆| 香港久久久电影| 欧美激情按摩| 午夜精品av| 欧美国产先锋| 国产亚洲精品一区二区| 夜夜嗨av一区二区三区四季av| 久久精精品视频| 亚洲精品国产视频| 久久国产精品久久w女人spa| 欧美三级精品| 亚洲成人原创| 久久久精品午夜少妇| 99国产精品久久久久老师| 久久婷婷成人综合色| 国产精品自在线| 亚洲永久免费精品|