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

天行健 君子當自強而不息

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>
            久久综合九色99| 亚洲电影第三页| 99精品热视频| 欧美日韩亚洲另类| 一二美女精品欧洲| 国产精品99久久久久久人 | 欧美夫妇交换俱乐部在线观看| 欧美一区二区高清在线观看| 国产亚洲一区二区三区在线观看 | 亚洲日本成人网| 亚洲激情一区二区| 国产精品xxxav免费视频| 欧美一二三区精品| 久久精品夜色噜噜亚洲a∨| 亚洲第一级黄色片| 亚洲精品日本| 国产老女人精品毛片久久| 久久人人看视频| 欧美韩国日本一区| 欧美一区不卡| 欧美激情综合色| 欧美一区二区精品在线| 久久色中文字幕| 亚洲综合999| 欧美专区第一页| 在线视频你懂得一区| 午夜天堂精品久久久久 | 欧美绝品在线观看成人午夜影视| 亚洲视频在线一区| 久久久www| 亚洲图片在线观看| 久久综合网络一区二区| 亚洲一区视频在线观看视频| 久久人人精品| 午夜视频在线观看一区二区| 久久一区二区三区av| 亚洲欧美日韩中文视频| 毛片精品免费在线观看| 欧美一区二区日韩| 欧美精品久久久久久久| 久久香蕉国产线看观看av| 欧美日韩视频| 欧美国产日韩一区| 国产女优一区| 99精品欧美一区| 亚洲欧洲视频在线| 欧美一区二区精品在线| 亚洲夜晚福利在线观看| 欧美大片在线影院| 免费在线成人| 国外成人在线| 午夜日韩激情| 欧美一区精品| 国产精品免费看片| 亚洲精品在线看| 日韩视频免费大全中文字幕| 久久网站免费| 蜜乳av另类精品一区二区| 国产日本欧美一区二区| 亚洲一级影院| 午夜亚洲精品| 国产精品色婷婷| 亚洲无线视频| 午夜精品在线观看| 国产精品毛片a∨一区二区三区| 91久久精品网| 一区二区成人精品| 欧美日韩高清免费| 日韩视频中文| 亚洲一区二区三区四区在线观看| 欧美日本中文| 一本一本久久| 午夜精品久久久久久久99水蜜桃| 欧美日韩一本到| 亚洲午夜日本在线观看| 亚洲欧美精品| 国产欧美日韩在线视频| 欧美影院成年免费版| 久久久久久9999| 1204国产成人精品视频| 欧美电影在线观看| 亚洲裸体视频| 午夜精品视频一区| 国模大胆一区二区三区| 久久在线精品| 99国产精品视频免费观看| 亚洲欧美成人一区二区在线电影 | 欧美激情精品久久久久久| 最近中文字幕日韩精品| 亚洲婷婷综合色高清在线| 国产欧美亚洲日本| 久久久久国产一区二区| 亚洲国产人成综合网站| 午夜欧美大片免费观看| 在线播放亚洲| 欧美性开放视频| 久久色中文字幕| 一本久道久久综合中文字幕| 久久国产视频网| 亚洲美女免费精品视频在线观看| 欧美小视频在线| 久久久精品国产一区二区三区| 亚洲国产91精品在线观看| 一区二区三区视频观看| 国产一区二区三区最好精华液| 欧美 日韩 国产一区二区在线视频| 日韩一级在线| 久久美女艺术照精彩视频福利播放| 亚洲精品久久久蜜桃| 国产欧美亚洲一区| 欧美日韩国产综合视频在线观看中文| 亚洲欧美日韩直播| 亚洲精品久久7777| 久久综合伊人77777蜜臀| 一区二区欧美在线| 在线成人激情| 国产视频一区在线| 欧美日本韩国一区二区三区| 久久国产色av| 亚洲综合999| 日韩午夜精品| 欧美激情第二页| 免费久久99精品国产自| 午夜精品视频在线| 亚洲视频自拍偷拍| aa亚洲婷婷| 亚洲国产精彩中文乱码av在线播放| 国产精品欧美日韩久久| 欧美日韩你懂的| 欧美成人官网二区| 久久免费高清| 久久久91精品国产一区二区三区| 亚洲一区二区三区高清不卡| 亚洲精品日韩综合观看成人91| 蜜臀a∨国产成人精品| 久久aⅴ国产欧美74aaa| 亚洲一区二区三区色| 一区二区三区四区蜜桃| 日韩网站在线观看| 亚洲国产女人aaa毛片在线| 在线国产精品播放| 一区二区自拍| 一区精品在线| 1024成人| 亚洲国产日韩欧美在线99| 激情视频一区二区三区| 狠狠v欧美v日韩v亚洲ⅴ| 韩国成人精品a∨在线观看| 国产人妖伪娘一区91| 国产综合亚洲精品一区二| 国产一区91| 在线精品一区二区| 亚洲黄网站在线观看| 最新国产精品拍自在线播放| 亚洲国产精品电影在线观看| 亚洲国产精品国自产拍av秋霞| 亚洲激情在线观看视频免费| 亚洲日韩成人| 亚洲嫩草精品久久| 欧美在线观看天堂一区二区三区| 久久av一区二区| 久久在线视频在线| 亚洲韩国日本中文字幕| 一区二区成人精品| 亚洲欧美日韩在线一区| 久久精品亚洲一区| 欧美电影电视剧在线观看| 欧美日韩国产一区精品一区| 欧美无乱码久久久免费午夜一区| 国产精品白丝黑袜喷水久久久| 国产欧美精品| 尤物99国产成人精品视频| 亚洲日本欧美| 午夜一区二区三区在线观看| 久久尤物视频| 亚洲精品一区二区三区在线观看| 亚洲网友自拍| 久久午夜精品| 国产精品二区影院| 黄色成人免费观看| 一区二区三区日韩欧美| 久久电影一区| 亚洲黄色三级| 欧美一区二区三区在线观看视频| 狼人社综合社区| 国产老女人精品毛片久久| 亚洲国产欧美日韩| 午夜伦理片一区| 欧美激情区在线播放| 亚洲一区二区三区色| 久久免费视频在线观看| 国产精品久久久久久久久久三级| 狠狠色噜噜狠狠色综合久| 亚洲色图自拍| 亚洲国产精品免费| 欧美中文字幕在线观看| 国产精品女主播在线观看| 亚洲人成在线免费观看| 久久全球大尺度高清视频| 亚洲一区二区三区高清|