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

天行健 君子當自強而不息

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 閱讀(758) 評論(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>
            亚洲电影有码| 亚洲国产欧美一区二区三区久久| 亚洲免费观看| 亚洲第一精品久久忘忧草社区| 久久久久久久久久久久久女国产乱| 国产亚洲成人一区| 久久黄色网页| 久久夜色精品亚洲噜噜国产mv| 精品盗摄一区二区三区| 另类尿喷潮videofree| 久色成人在线| av成人毛片| 亚洲伊人一本大道中文字幕| 国产精品日韩一区| 久久夜精品va视频免费观看| 蜜臀av一级做a爰片久久| 亚洲欧洲在线观看| 一区二区电影免费观看| 国产精品久久久久久妇女6080| 欧美在线播放| 嫩草影视亚洲| 亚洲欧美制服另类日韩| 久久久精品tv| 99视频在线观看一区三区| 亚洲一区二区三区777| 一区二区三区在线观看国产| 亚洲激情女人| 国产精品日日做人人爱| 欧美a一区二区| 国产精品av免费在线观看| 久久精品最新地址| 欧美精品日韩| 久久久www成人免费毛片麻豆| 美女精品在线观看| 欧美一级理论片| 免费在线国产精品| 久久精品国产视频| 欧美精品自拍| 老司机午夜精品视频在线观看| 欧美日韩在线播| 欧美www在线| 国产精品一区一区三区| 最新国产成人在线观看| 国产亚洲激情视频在线| 亚洲精品国产精品国自产在线 | 日韩视频免费大全中文字幕| 国产精品wwwwww| 欧美电影在线播放| 国产日韩一区二区三区在线播放 | 久久精品1区| 欧美母乳在线| 欧美大片91| 国色天香一区二区| 亚洲综合色丁香婷婷六月图片| 91久久夜色精品国产网站| 欧美一区二区三区免费大片| 亚洲一区二区三区在线视频| 欧美mv日韩mv国产网站| 老牛国产精品一区的观看方式| 国产精品久久久久永久免费观看| 91久久精品国产91性色| 亚洲电影在线免费观看| 久久精品综合| 久热re这里精品视频在线6| 国产日韩欧美在线播放不卡| 亚洲午夜影视影院在线观看| 亚洲午夜未删减在线观看| 欧美高清视频| 亚洲欧洲精品天堂一级| 亚洲精品在线电影| 欧美激情一区| 亚洲精品美女| 一本一本a久久| 欧美人交a欧美精品| 亚洲激情校园春色| 亚洲免费高清| 欧美午夜视频在线观看| 亚洲午夜一区二区三区| 久久精品国产成人| 国内一区二区三区| 久久视频国产精品免费视频在线| 麻豆精品一区二区av白丝在线| 国产在线视频不卡二| 久久精品国产99国产精品澳门| 久久免费黄色| 亚洲美女视频| 国产精品v欧美精品∨日韩| 亚洲综合第一| 久久一区二区三区超碰国产精品| 在线国产精品播放| 欧美—级在线免费片| 亚洲色在线视频| 久久精品一区二区三区中文字幕 | 国产日韩免费| 久久久久.com| 亚洲精品美女久久7777777| 亚洲永久在线| 国产一区二区三区网站| 美腿丝袜亚洲色图| 亚洲图色在线| 欧美高清免费| 亚洲免费在线观看| 韩国精品主播一区二区在线观看| 免费黄网站欧美| 亚洲欧美另类中文字幕| 欧美高清视频一二三区| 亚洲欧美日本伦理| 在线看欧美日韩| 国产精品v日韩精品| 久久久精品视频成人| 亚洲精品国产精品国自产观看浪潮 | 国内视频精品| 欧美精品18videos性欧美| 亚洲欧美视频在线| 亚洲国产激情| 久久久久九九九九| 亚洲一区二区三区色| 亚洲第一页在线| 国产精品色午夜在线观看| 免费一级欧美在线大片| 亚洲女爱视频在线| 99国产精品| 亚洲福利在线观看| 久久精品在线视频| 亚洲影院色无极综合| 亚洲激情一区二区| 国产一区二区三区高清在线观看| 欧美日韩精品一区二区三区四区| 久久久另类综合| 欧美一区二区性| 亚洲一区二区三区在线| 日韩视频免费观看| 欧美激情亚洲视频| 免费不卡在线观看| 久久女同精品一区二区| 欧美亚洲一区二区在线观看| 在线亚洲激情| 日韩视频中文字幕| 亚洲精品久久久一区二区三区| 狠狠色综合色综合网络| 国产网站欧美日韩免费精品在线观看| 欧美日韩亚洲一区二区三区在线观看| 免费久久99精品国产| 久久久久国产精品一区三寸| 午夜精品久久久久久久久久久| 一二三区精品| 亚洲视频久久| 亚洲婷婷免费| 亚洲欧美一区二区三区极速播放| 亚洲少妇中出一区| av成人免费| 亚洲一级电影| 香蕉久久夜色| 欧美专区在线| 久久蜜桃av一区精品变态类天堂| 久久精品夜色噜噜亚洲aⅴ| 久久精品国产99精品国产亚洲性色 | 免费不卡中文字幕视频| 免费精品视频| 亚洲国产视频a| 亚洲人午夜精品| 亚洲手机成人高清视频| 亚洲欧美日韩精品在线| 欧美中文字幕第一页| 久久男女视频| 欧美成人免费一级人片100| 欧美另类在线播放| 国产精品区一区二区三| 国产在线播精品第三| 亚洲国产精品久久久久久女王| 日韩系列在线| 欧美综合国产| 亚洲国产99精品国自产| 日韩视频久久| 欧美影院精品一区| 欧美r片在线| 国产精品九九| 在线欧美日韩国产| 在线一区视频| 久久一区二区三区四区五区| 亚洲高清免费在线| 亚洲夜间福利| 麻豆精品视频在线观看| 欧美婷婷六月丁香综合色| 韩国三级在线一区| 一区二区三区视频在线观看| 久久精品视频在线观看| 91久久黄色| 欧美亚洲三区| 欧美理论电影在线播放| 国产尤物精品| 中日韩高清电影网| 美女久久一区| 亚洲一区二区三区在线播放| 蜜桃av一区二区在线观看| 国产日韩欧美三区| 亚洲视频电影在线| 欧美激情aⅴ一区二区三区| 欧美一区二区成人| 国产精品成人av性教育|