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

天行健 君子當自強而不息

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 閱讀(748) 評論(1)  編輯 收藏 引用

評論

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

抄書嗎?  回復  更多評論   

公告

導航

統計

常用鏈接

隨筆分類(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>
            欧美激情一区二区三区高清视频| 免费永久网站黄欧美| 亚洲第一页自拍| 欧美中文日韩| 激情校园亚洲| 亚洲福利在线视频| 国产精品激情偷乱一区二区∴| 亚洲男人的天堂在线aⅴ视频| 99综合精品| 国产欧美一区二区三区沐欲| 久久午夜电影网| 欧美成年人视频| 亚洲欧美激情精品一区二区| 久久久久国内| 一区二区三区日韩| 久久成人免费日本黄色| 亚洲老板91色精品久久| 亚洲综合另类| 亚洲国产欧美在线人成| 一区二区三区精品国产| 一区二区在线观看视频| 亚洲美女精品久久| 狠狠干综合网| 亚洲无限乱码一二三四麻| 亚洲电影免费观看高清完整版在线观看 | 亚洲人成在线播放| 国产日韩一区二区三区| 亚洲破处大片| 国产色产综合产在线视频| 亚洲国产三级在线| 国产在线不卡| 亚洲一区综合| 在线亚洲电影| 美女黄毛**国产精品啪啪| 欧美专区日韩专区| 欧美日韩成人综合天天影院| 久久久水蜜桃av免费网站| 国产精品成人在线| 亚洲精品孕妇| 亚洲精品久久久久久久久| 欧美在线视频全部完| 亚洲免费视频中文字幕| 欧美日韩国产成人在线| 欧美激情一区二区| 韩国欧美国产1区| 亚洲欧美一区二区三区久久| 亚洲网站视频福利| 欧美日产一区二区三区在线观看 | 久久国产福利国产秒拍| 国产精品爱啪在线线免费观看| 欧美激情中文字幕一区二区| 黄色一区三区| 久久精品视频免费| 久久婷婷激情| 激情综合网激情| 欧美在线视频不卡| 久久人人看视频| 国产真实乱子伦精品视频| 欧美一区二区视频观看视频| 久久精品国产久精国产思思| 国产午夜精品美女毛片视频| 欧美影片第一页| 久久亚洲高清| 亚洲国产激情| 欧美国产亚洲精品久久久8v| 亚洲精品在线二区| 亚洲综合三区| 国产精品亚洲人在线观看| 午夜欧美精品| 欧美xxx成人| 亚洲免费电影在线观看| 欧美日韩在线精品一区二区三区| 一个色综合导航| 久久9热精品视频| 一区二区在线观看视频| 欧美成人精品h版在线观看| 亚洲高清123| 正在播放亚洲| 国产女主播一区| 久久嫩草精品久久久久| 亚洲欧洲日本专区| 亚洲欧美日韩中文视频| 狠狠色狠狠色综合日日tαg| 欧美成人情趣视频| 中日韩高清电影网| 久久夜色精品国产亚洲aⅴ| 亚洲精品久久久久久久久久久久 | 欧美精品自拍偷拍动漫精品| 这里只有视频精品| 老司机精品福利视频| 99re6热只有精品免费观看| 国产精品普通话对白| 久久综合网hezyo| 亚洲美女视频在线免费观看| 久久精品国内一区二区三区| 日韩一区二区免费看| 国产午夜亚洲精品羞羞网站| 麻豆久久精品| 亚洲一区欧美激情| 欧美激情欧美狂野欧美精品| 性一交一乱一区二区洋洋av| 亚洲高清影视| 国产色爱av资源综合区| 欧美精品入口| 久久女同互慰一区二区三区| 亚洲视频第一页| 欧美成人资源| 久久久久久网| 亚洲欧美日韩精品久久奇米色影视 | 欧美午夜不卡视频| 免费欧美日韩| 久久成人人人人精品欧| 亚洲永久在线| 日韩一级视频免费观看在线| 欧美成人午夜激情| 久久亚洲美女| 午夜久久美女| 一区二区三区高清在线观看| 精品成人在线| 国产日韩欧美麻豆| 欧美午夜激情小视频| 欧美全黄视频| 久久久蜜臀国产一区二区| 一区二区三区免费看| 亚洲国产婷婷| 亚洲国产精品国自产拍av秋霞| 狂野欧美激情性xxxx欧美| 久久aⅴ乱码一区二区三区| 亚洲欧美日韩精品久久久久 | 国内外成人免费激情在线视频网站| 欧美日韩在线精品| 欧美日韩一区二区三区在线视频| 欧美激情免费观看| 欧美成人一区二区三区在线观看 | 亚洲最新在线| 亚洲精品中文字幕在线| 亚洲二区在线观看| 亚洲国产成人精品久久| 亚洲国产综合在线看不卡| 亚洲国产高清高潮精品美女| 在线播放国产一区中文字幕剧情欧美| 国产一区二三区| 国产精品一区一区三区| 国产日本欧美一区二区三区| 国内自拍视频一区二区三区 | 欧美三级日韩三级国产三级| 欧美三级电影大全| 国产精品久久福利| 国产午夜精品美女视频明星a级| 国产亚洲一区在线播放| 国产亚洲在线观看| 黄网站免费久久| 亚洲日本va午夜在线电影| av成人毛片| 久久精品欧洲| 亚洲第一精品电影| 日韩亚洲欧美精品| 亚洲视频每日更新| 午夜一区不卡| 男人的天堂成人在线| 欧美色网在线| 国产综合精品一区| 亚洲精品一区在线| 亚洲综合色视频| 欧美ed2k| 一区二区三区国产精品| 欧美在线不卡| 欧美日韩国产免费观看| 国产欧美一区二区三区在线老狼 | 国产精品久久久久久妇女6080| 国产精品免费电影| 亚洲高清色综合| 亚洲综合日韩| 美女精品一区| 亚洲视频网站在线观看| 久久久久久久久久久成人| 欧美日本精品| 国产日本欧美一区二区三区| 日韩一区二区免费看| 久久se精品一区精品二区| 欧美电影打屁股sp| 亚洲在线成人| 欧美日韩国产另类不卡| 狠狠色丁香婷婷综合| 亚洲视频日本| 亚洲成人中文| 久久精品视频播放| 欧美三级小说| 亚洲欧洲精品一区二区三区不卡 | 99热这里只有成人精品国产| 久久精品理论片| 在线视频日韩| 欧美精品一区二区精品网| 激情欧美日韩| 欧美在线影院在线视频| 宅男噜噜噜66一区二区66| 欧美黑人多人双交| 亚洲国产另类精品专区| 久久久久久9999| 先锋影院在线亚洲|