template Header {
<3D82AB43-62DA-11cf-AB39-0020AF71E433>
WORD major;
WORD minor;
DWORD flags;
}

template Vector {
<3D82AB5E-62DA-11cf-AB39-0020AF71E433>
FLOAT x;
FLOAT y;
FLOAT z;
}

template Coords2d {
<F6F23F44-7686-11cf-8F52-0040333594A3>
FLOAT u;
FLOAT v;
}

.......

==================================================

Mesh Body1 {
303;                                         //下面点(r,g,b)的个数
0.000000;-0.061426;0.938846;,
-0.049693;0.200773;0.692165;,

.....

599;              //下面点的个数,奇怪的是为什么这里是599 不是303?难道是有些点vertice 没有material
3;300,301,302;,
3;299,300,302;,
3;298,300,299;,

}

*******由于迷惑不解我就去查了一下,原来我完全理解错了。303是顶点个数 599是面数。303下面的是顶点坐标根本不是rgb

599下面是前面303个顶点的索引*******

http://wenku.baidu.com/link?url=CYKd7-nGeu3msat2AVXmHoWv5foNt7R4IdeBBGYEBzEVm71860wrzLPoi6YkNMFJQZ-azPaePsaRkHvahgnHOSJXy3fXZTybWEujMW3gLV_

这里讲的很详细了

MeshMaterialList {
1;
1;
0;;
Material {
0.694118;0.694118;0.694118;1.000000;;//face color
50.000000;                //power
1.000000;1.000000;1.000000;;      //specular color
0.000000;0.000000;0.000000;;      //emissive color
TextureFilename {
"tiger.bmp";
}
}
}

MeshTextureCoords {
303;                              //下面点(u,v)的个数
0.190860;-0.544059;,
0.272086;-0.355992;,
0.077337;-0.522561;,

}

===========================================

开始是一堆类型定义

之后是一堆数据

mesh body 就是material 和 vertice 两部分(我猜的)猜错了。。。

mesh body是点和面

MeshMaterialList是material

MeshTextureCoords就是顶点的uv坐标了

我产生这种错觉是因为

render mesh的时候的代码 看起来都没有画vertices的

VOID Render()
{
// Clear the backbuffer and the zbuffer
g_pd3dDevice->Clear( 0, NULL, D3DCLEAR_TARGET | D3DCLEAR_ZBUFFER,
D3DCOLOR_XRGB( 0, 0, 255 ), 1.0f, 0 );

// Begin the scene
if( SUCCEEDED( g_pd3dDevice->BeginScene() ) )
{
// Setup the world, view, and projection matrices
SetupMatrices();

// Meshes are divided into subsets, one for each material. Render them in
// a loop
for( DWORD i = 0; i < g_dwNumMaterials; i++ )
{
// Set the material and texture for this subset
g_pd3dDevice->SetMaterial( &g_pMeshMaterials[i] );
g_pd3dDevice->SetTexture( 0, g_pMeshTextures[i] );

// Draw the mesh subset
g_pMesh->DrawSubset( i );
}

// End the scene
g_pd3dDevice->EndScene();
}

找来找去 既然setMaterial 和setTexture都是字面的意思

那就只能是DrawSubset做得了

跟进去看的时候 发现一个interface的实现

mesh material drawsubset什么的都用到了这个方法

#define DECLARE_INTERFACE_(iface, baseiface)            interface DECLSPEC_NOVTABLE iface : public baseiface

DECLARE_INTERFACE_(ID3DXMesh, ID3DXBaseMesh)
{
// IUnknown
STDMETHOD(QueryInterface)(THIS_ REFIID iid, LPVOID *ppv) PURE;
STDMETHOD_(ULONG, AddRef)(THIS) PURE;
STDMETHOD_(ULONG, Release)(THIS) PURE;

#define STDMETHOD(method)        virtual COM_DECLSPEC_NOTHROW HRESULT STDMETHODCALLTYPE method

这样写读起来还真麻烦,一堆宏的缩写。

翻译过来其实就是

interface DECLSPEC_NOVTABLE ID3DXMesh :public ID3DxBaseMesh

{

virtual COM_DECLSPEC_NOTHROW HRESULT STDMETHODCALLTYPE QueryInterface(THIS_ REFIID iid, LPVOID *ppv) PURE;

这个继承实现的是interface的功能。。。。。除了翻译这些里面还有一堆宏。。。。

总之g_pMesh->DrawSubset( i );这个句画出了模型。。dx不开源

DX 的.x 文件的更多相关文章

  1. eclipse升级Android SDK Tool版本到25.2.5后运行项目报错Unable to build: the file dx.jar was not loaded from the SDK folder

    概述 由于最近通过SDK-Manager更新了build-tools,当要用到dx.jar这个包时,自动调用最新版本Android SDK build-tools中dx.jar,但是运行android ...

  2. Unable to build: the file dx.jar was not loaded from the SDK folder

    eclipse 运行 android 时失败了,提示 Unable to build: the file dx.jar was not loaded from the SDK folder! 解决办法 ...

  3. 我的Android第四章

    本章需掌握 1.连接真机的过程. 2.dx指令的作用 3.adb是什么? 4.adb有什么用(有什么好处)? 5.adb的一些常用命令 1.连接真机的过程. 需要:一部Android机.usb连接线, ...

  4. [Android Pro] Android以root起一个process[shell脚本的方法]

    reference to :  http://***/Article/11768 有时候我们写的app要用uid=0的方式启动一个process,framework层和app层是做不到的,只有通过写脚 ...

  5. 汇编int21h,DOS调用(转)

    表:DOS系统功能调INT 21H AH 功能 调用参数 返回参数 00 程序终止(同INT 20H) CS=程序段前缀 01 键盘输入并回显 AL=输入字符 02 显示输出 DL=输出字符 03 异 ...

  6. DOS系统功能调用表(INT 21H)

    AH 功能 调用参数 返回参数 00 程序终止(同INT 20H) CS=程序段前缀 01 键盘输入并回显 AL=输入字符 02 显示输出 DL=输出字符 03 异步通迅输入 AL=输入数据 04 异 ...

  7. [翻译.每月一译.每日一段]Exploring Fonts with DirectWrite and Modern C++

    Windows with C++ Exploring Fonts with DirectWrite and Modern C++ Kenny Kerr DirectWrite is an incred ...

  8. int21 h

    表:DOS系统功能调INT 21H AH 功能 调用参数 返回参数 00 程序终止(同INT 20H) CS=程序段前缀 01 键盘输入并回显 AL=输入字符 02 显示输出 DL=输出字符 03 异 ...

  9. [转]把项目从VS2005升级到VS2013

    原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息和本声明.否则将追究法律责任.http://rangercyh.blog.51cto.com/1444712/1394348 ...

随机推荐

  1. 函数 datediff(根据objid 获取同name 同年度最近的4条记录)

    显示 包括选择的这条,在加上 选择年度的此人 最近的 3条.(最多显示4条) . 记录数大于4条 . 全显示 create table temp( objid ,) primary key , nam ...

  2. Cocos开发中Visual Studio下HttpClient开发环境设置

    Cocos2d-x 3.x将与网络通信相关的类集成到libNetwork类库工程中,这其中包括了HttpClient类.我们需要在Visual Studio解决方案中添加libNetwork类库工程. ...

  3. Swift静态方法

    与静态属性类似,Swift中还定义了静态方法,也称为类型方法,所谓“类型”是指枚举.结构体和类.静态方法定义的方法也是与静态属性类似的,枚举和结构体的静态方法使用的关键字是static,类的静态方法使 ...

  4. Objective-C 【单个对象内存管理(野指针&内存泄露)】

    ------------------------------------------- 单个对象内存管理 (1)野指针 ①定义了一个指针变量,但是并没有赋初值,它随机指向一个东西 ②某指针变量指向的内 ...

  5. oracle表分区心得

    由于系统是对前批次系统进行改造,需要对表建立分区 1.已建立未分区的表,无法进行任何表分区的操作,如:增加.删除.合并.拆分均无法操作 2.已分区的表至少保留1个分区,即不能全删 3.若有defaul ...

  6. (转)一些国外优秀的elasticsearch使用案例

    Github “Github使用Elasticsearch搜索20TB的数据,包括13亿的文件和1300亿行的代码” 这个不用介绍了吧,码农们都懂的,Github在2013年1月升级了他们的代码搜索, ...

  7. Oracle常见的问题

    1.oracle 中文问号乱码解决方法: 在系统变量里面添加变量名:NLS_LANG 变量值:  SIMPLIFIED CHINESE_CHINA.ZHS16GBK 2.查询oracle 里的主键 S ...

  8. 关于delete

    上面三图在debug下,delete的时候会以fe ee覆盖指针所指向要回收内存前后较大一块区域的值. 下图对于release下delete的时候会先用fe ee覆盖指针所指位置起6*4=24字节, ...

  9. WSAEventSelect模型详解

    WSAEventSelect 是 WinSock 提供的一种异步事件通知I/O模型,与 WSAAsyncSelect模型有些类似.       该模型同样是接收 FD_XXX 之类的网络事件,但是是通 ...

  10. Shell根据年月日创建文件夹

    #!/bin/sh dir_path="/vol/project/log/test/" ..} do #echo "$year" cd $dir_path mk ...