DX 的.x 文件
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个顶点的索引*******
这里讲的很详细了
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 文件的更多相关文章
- 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 ...
- 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! 解决办法 ...
- 我的Android第四章
本章需掌握 1.连接真机的过程. 2.dx指令的作用 3.adb是什么? 4.adb有什么用(有什么好处)? 5.adb的一些常用命令 1.连接真机的过程. 需要:一部Android机.usb连接线, ...
- [Android Pro] Android以root起一个process[shell脚本的方法]
reference to : http://***/Article/11768 有时候我们写的app要用uid=0的方式启动一个process,framework层和app层是做不到的,只有通过写脚 ...
- 汇编int21h,DOS调用(转)
表:DOS系统功能调INT 21H AH 功能 调用参数 返回参数 00 程序终止(同INT 20H) CS=程序段前缀 01 键盘输入并回显 AL=输入字符 02 显示输出 DL=输出字符 03 异 ...
- DOS系统功能调用表(INT 21H)
AH 功能 调用参数 返回参数 00 程序终止(同INT 20H) CS=程序段前缀 01 键盘输入并回显 AL=输入字符 02 显示输出 DL=输出字符 03 异步通迅输入 AL=输入数据 04 异 ...
- [翻译.每月一译.每日一段]Exploring Fonts with DirectWrite and Modern C++
Windows with C++ Exploring Fonts with DirectWrite and Modern C++ Kenny Kerr DirectWrite is an incred ...
- int21 h
表:DOS系统功能调INT 21H AH 功能 调用参数 返回参数 00 程序终止(同INT 20H) CS=程序段前缀 01 键盘输入并回显 AL=输入字符 02 显示输出 DL=输出字符 03 异 ...
- [转]把项目从VS2005升级到VS2013
原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息和本声明.否则将追究法律责任.http://rangercyh.blog.51cto.com/1444712/1394348 ...
随机推荐
- 函数 datediff(根据objid 获取同name 同年度最近的4条记录)
显示 包括选择的这条,在加上 选择年度的此人 最近的 3条.(最多显示4条) . 记录数大于4条 . 全显示 create table temp( objid ,) primary key , nam ...
- Cocos开发中Visual Studio下HttpClient开发环境设置
Cocos2d-x 3.x将与网络通信相关的类集成到libNetwork类库工程中,这其中包括了HttpClient类.我们需要在Visual Studio解决方案中添加libNetwork类库工程. ...
- Swift静态方法
与静态属性类似,Swift中还定义了静态方法,也称为类型方法,所谓“类型”是指枚举.结构体和类.静态方法定义的方法也是与静态属性类似的,枚举和结构体的静态方法使用的关键字是static,类的静态方法使 ...
- Objective-C 【单个对象内存管理(野指针&内存泄露)】
------------------------------------------- 单个对象内存管理 (1)野指针 ①定义了一个指针变量,但是并没有赋初值,它随机指向一个东西 ②某指针变量指向的内 ...
- oracle表分区心得
由于系统是对前批次系统进行改造,需要对表建立分区 1.已建立未分区的表,无法进行任何表分区的操作,如:增加.删除.合并.拆分均无法操作 2.已分区的表至少保留1个分区,即不能全删 3.若有defaul ...
- (转)一些国外优秀的elasticsearch使用案例
Github “Github使用Elasticsearch搜索20TB的数据,包括13亿的文件和1300亿行的代码” 这个不用介绍了吧,码农们都懂的,Github在2013年1月升级了他们的代码搜索, ...
- Oracle常见的问题
1.oracle 中文问号乱码解决方法: 在系统变量里面添加变量名:NLS_LANG 变量值: SIMPLIFIED CHINESE_CHINA.ZHS16GBK 2.查询oracle 里的主键 S ...
- 关于delete
上面三图在debug下,delete的时候会以fe ee覆盖指针所指向要回收内存前后较大一块区域的值. 下图对于release下delete的时候会先用fe ee覆盖指针所指位置起6*4=24字节, ...
- WSAEventSelect模型详解
WSAEventSelect 是 WinSock 提供的一种异步事件通知I/O模型,与 WSAAsyncSelect模型有些类似. 该模型同样是接收 FD_XXX 之类的网络事件,但是是通 ...
- Shell根据年月日创建文件夹
#!/bin/sh dir_path="/vol/project/log/test/" ..} do #echo "$year" cd $dir_path mk ...