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

天行健 君子當自強而不息

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ⅴ视频| 国产亚洲精品久久久久久| 久久裸体视频| 欧美精品v日韩精品v国产精品| 亚洲最新在线视频| 亚洲中无吗在线| 黄色综合网站| 亚洲国产精品va在线看黑人动漫 | 亚洲国产精品女人久久久| 欧美日韩精品国产| 久久国产精品久久久久久久久久| 久久免费99精品久久久久久| 一区二区高清| 久久精品99国产精品| 一片黄亚洲嫩模| 欧美中文字幕在线观看| 日韩一区二区免费看| 亚洲一级黄色片| 亚洲黄色成人| 午夜精品在线视频| 中文一区在线| 久久久天天操| 欧美一级大片在线观看| 欧美国产高清| 久久久久久亚洲综合影院红桃| 欧美精品播放| 久久这里有精品视频| 国产精品国产三级国产aⅴ9色| 久久综合九色综合欧美狠狠| 欧美性天天影院| 欧美成人在线影院| 国产亚洲精品久久久| 夜夜爽99久久国产综合精品女不卡 | 亚洲高清久久网| 国产日韩亚洲欧美精品| 日韩午夜免费视频| 亚洲欧洲日本mm| 久久久久久久999精品视频| 亚洲女人av| 欧美午夜电影在线| 最近中文字幕日韩精品| 狠狠色狠狠色综合日日91app| 亚洲视频在线观看一区| 一区二区三区日韩| 欧美激情aⅴ一区二区三区| 免费中文日韩| 永久免费视频成人| 久久精品首页| 久久这里只精品最新地址| 国产乱肥老妇国产一区二| 一区二区三区偷拍| 一区二区三区产品免费精品久久75| 老司机一区二区三区| 欧美成人午夜激情在线| 樱桃视频在线观看一区| 久久国产日韩| 免费欧美在线| 亚洲国产欧美一区二区三区久久| 久久久欧美一区二区| 男女av一区三区二区色多| 在线电影国产精品| 老司机67194精品线观看| 欧美成年视频| 亚洲免费电影在线| 欧美日韩在线亚洲一区蜜芽| 亚洲精品中文字| 亚洲一区在线免费| 国产精品一卡二| 久久国产精品网站| 欧美高清在线观看| 一区二区三区欧美| 国产精品精品视频| 欧美亚洲一区二区在线观看| 久久视频在线视频| 亚洲黄色成人久久久| 欧美精品一区在线发布| 在线视频欧美日韩精品| 午夜在线观看免费一区| 国一区二区在线观看| 免费成人在线观看视频| 99re6热只有精品免费观看| 亚洲欧美在线aaa| 国产视频观看一区| 免费欧美电影| 亚洲女女做受ⅹxx高潮| 欧美国产精品v| 亚洲一区三区视频在线观看 | 欧美劲爆第一页| 亚洲图片你懂的| 欧美成人午夜视频| 亚洲欧美中文日韩在线| 永久555www成人免费| 欧美午夜一区二区| 久久夜色精品| 亚洲性av在线| 亚洲国产精品久久久久婷婷老年| 亚洲欧美视频在线观看视频| 在线免费观看日韩欧美| 国产精品观看| 欧美成人第一页| 午夜精品三级视频福利| 亚洲精品日本| 免费成人激情视频| 香蕉av福利精品导航| 亚洲精品午夜| 一区在线观看| 国产欧美一区二区精品仙草咪| 女人香蕉久久**毛片精品| 午夜视频在线观看一区二区| 亚洲日产国产精品| 欧美吻胸吃奶大尺度电影| 欧美在线首页| 亚洲视频一区二区免费在线观看| 欧美国产综合| 久久亚洲综合色一区二区三区| 在线亚洲一区| 亚洲毛片在线| 亚洲福利免费| 国内精品久久久久久久果冻传媒| 国产精品国产三级国产专播精品人| 欧美成人一区二区三区片免费| 欧美自拍偷拍| 午夜天堂精品久久久久 | 亚洲激情自拍| 欧美国产精品一区| 蜜桃视频一区| 麻豆国产精品777777在线| 欧美一区二区三区四区在线观看地址 | 香蕉久久夜色精品| 一区二区三区蜜桃网| 韩国精品在线观看| 国内视频精品| 一区精品在线播放| 一区二区三区在线视频播放| 国内精品写真在线观看| 国产午夜精品在线| 韩日在线一区| 在线观看日韩国产| 亚洲国产欧美久久| 亚洲人午夜精品免费| 亚洲精品视频在线看| 亚洲精品影视| 亚洲香蕉伊综合在人在线视看| 中文精品一区二区三区| 亚洲一区二区三区精品在线观看| 亚洲视频播放| 欧美一区二视频| 久久精品五月| 欧美福利专区| 亚洲精品在线一区二区| 中文一区二区在线观看| 午夜精品久久久久久久男人的天堂 | 国产欧美韩国高清| 国内外成人免费激情在线视频| 激情久久久久久久久久久久久久久久| 樱桃国产成人精品视频| 亚洲免费观看在线观看| 亚洲一区二区在线| 久久久久久有精品国产| 欧美韩国日本一区| 一区二区三区导航| 久久久久**毛片大全| 欧美成人四级电影| 国产精品福利影院| 影音先锋亚洲一区| 在线视频精品| 久久婷婷av| 亚洲精品乱码久久久久久蜜桃麻豆 | 亚洲精品日日夜夜| 99热免费精品在线观看| 国产精品网站一区| 久久久久久久久综合| 99视频一区| 欧美国产综合| 9国产精品视频| 欧美一级视频免费在线观看| 免费成人av在线| 国产精品日韩精品| 在线成人av.com| 亚洲欧美成aⅴ人在线观看| 免费日本视频一区| 亚洲一区二区在线免费观看| 久久艳片www.17c.com| 国产精品久久婷婷六月丁香| 亚洲电影免费在线观看| 欧美亚洲日本一区| 日韩视频中午一区| 牛牛国产精品| 黑人操亚洲美女惩罚| 亚洲欧美日韩在线不卡| 亚洲国产高清一区| 久久免费视频网| 国产一区二区三区黄视频| 亚洲欧美福利一区二区| 欧美一区三区三区高中清蜜桃| 欧美国产第二页|