获取加载进ID3DXMESH后的.x文件的信息
2009-04-01 17:33
155 查看
通常,我们获得了一个LPD3DXMESH指针来保存一个.x文件的顶点与索引信息,但是,我们通常会需要直接针对顶点来做一些事情,比如,求包围盒等。那么这个时候我们就需要提取模型中的相关顶点信息。接下来,我就简单的说一下我实现提取顶点位置信息的过程。
大家首先要知道以下这个方法:
static LPVOID pV;
pMesh->LockVertexBuffer( 0,&pV ); // 锁定顶点缓冲区
pMesh->UnlockVertexBuffer();
这个方法是为了获取由ID3DXMESH所保存的顶点缓冲区的首地址,但是,我们此时并不知道顶点声明的结构是怎么样的。所以,除了明确知道第一个指向的是第一个的顶点的位置信息(可以通过(LPD3DXVEC3)pV来编译查看),我们并不能准确的猜测下一个顶点需要如何移动指针的位置来定位。
这个时候,我们希望能够让pV只保存顶点位置信息,这可以通过:
HRESULT CloneMesh(
DWORD Options,
CONST D3DVERTEXELEMENT9 * pDeclaration,
LPDIRECT3DDEVICE9 pDevice,
LPD3DXMESH * ppCloneMesh
);
来做到,当然使用CloneFVFMesh也可以做到,但是现在是shader编程大行其道的时代,感觉灵活顶点格式有点力不从心了。
这个函数是ID3DXMESH的成员函数,他通过传入一个你需要的顶点声明结构来从现有的ID3DXMESH中提取你需要的部分,并把他们克隆到一个新的ID3DXMESH中去,这样你就可以掌握当前的指针所指向的是什么样的信息,并通过强制类型转换读取它。
下面是整个提取顶点信息的代码:
//需要重新设置的节点结构
D3DVERTEXELEMENT9 _decl[] =
{
{0, 0, D3DDECLTYPE_FLOAT3, D3DDECLMETHOD_DEFAULT, D3DDECLUSAGE_POSITION, 0},
D3DDECL_END()
};
//重新设置用到的mesh指针
LPD3DXMESH pMesh;
//克隆顶点
m_pMesh->CloneMesh( D3DXMESH_MANAGED, _decl, pDevice, &pMesh );
从上面的代码中可以看出,我定义的顶点声明中只包含了位置信息,那么克隆出来的pMesh中的顶点缓冲自然也只包含顶点位置信息。
同理我们也可以提取顶点中法线,纹理坐标等所有有用的东东。
Enjoy!!
大家首先要知道以下这个方法:
static LPVOID pV;
pMesh->LockVertexBuffer( 0,&pV ); // 锁定顶点缓冲区
pMesh->UnlockVertexBuffer();
这个方法是为了获取由ID3DXMESH所保存的顶点缓冲区的首地址,但是,我们此时并不知道顶点声明的结构是怎么样的。所以,除了明确知道第一个指向的是第一个的顶点的位置信息(可以通过(LPD3DXVEC3)pV来编译查看),我们并不能准确的猜测下一个顶点需要如何移动指针的位置来定位。
这个时候,我们希望能够让pV只保存顶点位置信息,这可以通过:
HRESULT CloneMesh(
DWORD Options,
CONST D3DVERTEXELEMENT9 * pDeclaration,
LPDIRECT3DDEVICE9 pDevice,
LPD3DXMESH * ppCloneMesh
);
来做到,当然使用CloneFVFMesh也可以做到,但是现在是shader编程大行其道的时代,感觉灵活顶点格式有点力不从心了。
这个函数是ID3DXMESH的成员函数,他通过传入一个你需要的顶点声明结构来从现有的ID3DXMESH中提取你需要的部分,并把他们克隆到一个新的ID3DXMESH中去,这样你就可以掌握当前的指针所指向的是什么样的信息,并通过强制类型转换读取它。
下面是整个提取顶点信息的代码:
//需要重新设置的节点结构
D3DVERTEXELEMENT9 _decl[] =
{
{0, 0, D3DDECLTYPE_FLOAT3, D3DDECLMETHOD_DEFAULT, D3DDECLUSAGE_POSITION, 0},
D3DDECL_END()
};
//重新设置用到的mesh指针
LPD3DXMESH pMesh;
//克隆顶点
m_pMesh->CloneMesh( D3DXMESH_MANAGED, _decl, pDevice, &pMesh );
从上面的代码中可以看出,我定义的顶点声明中只包含了位置信息,那么克隆出来的pMesh中的顶点缓冲自然也只包含顶点位置信息。
同理我们也可以提取顶点中法线,纹理坐标等所有有用的东东。
Enjoy!!
相关文章推荐
- thinkphp3.2.3 加载 获取mp3录音文件信息,时长
- Java获取音乐文件艺术家,歌曲名,所属专辑等信息
- C#获取 Flv视频文件播放时间长度等信息
- 【VB.NET】获取文件版本信息
- android从未安装的apk文件里获取信息(包信息,资源信息)
- Spring类中获取配置文件信息
- C# 获取选择文件信息
- 【Android】获取手机中已安装apk文件信息(PackageInfo、ResolveInfo)(应用图片、应用名、包名等)
- 操作 Wave 文件(4): 获取 Wave 文件主块与子块的信息
- android根据uri或文件绝对路径获取文件基本信息
- js 获取 sharepoint 2010 网站信息(title,id,language……)
- 利用批处理程序和excel获取windows文件信息
- 根据mac地址+deviceid获取设备唯一编码 获取手机及SIM卡相关信息
- Android平台中应该如何获取音乐文件的信息
- 以最省内存的方式把大图片加载到内存及获取Exif信息和获取屏幕高度和宽度的新方法
- 如何在跨平台的情况下获取可执行文件的详细信息和属性
- 获取文件系统信息
- 获取文件的信息stat() lstat() fstat()
- C# 获取文件大小,创建时间,文件信息,FileInfo类的属性表
- Android中由文件名获取文件Id的两种方法