将x文件绑在mdl手上
来源:互联网 发布:有魅力的女人 知乎 编辑:程序博客网 时间:2024/04/19 13:26
---------------------------西昌.何雨锋 将x文件绑在mdl手上
有一个函数是attach,但是实际上不用这个来绑定,因为这是骨骼之间做绑定的。
这里用的是矩阵绑定法,被绑定的物体的位置、动作、大小决定了绑定的东西的这些。
所以连大小设定都没必要了。
***************
首先在h文件中找到d3dvector定义的位置(实际这个结构在DX中是有的,但是由于这些结构都
比较简单,完全没必要再去包括d8d.h文件),所以再参考了VB中的D3DMATRIX结构后,就直接在
vector的定义附近自己写一个D3DMATRIX结构就可以了,结构定义如下:
#ifndef D3DMATRIX_DEFINED
typedef struct D3DMATRIX
{
float m11;
float m12;
float m13;
float m14;
float m21;
float m22;
float m23;
float m24;
float m31;
float m32;
float m33;
float m34;
float m41;
float m42;
float m43;
float m44;
} D3DMATRIX;
定义好以后,就可以在CPP文件中定义matrix了。
ITVMesh mesh1; //用来读取武器
D3DVECTOR vector1; //用来得到手的位置,这个位置是用不上的,而且也是错误的
D3DMATRIX matrix1; //用来得到手的矩阵
mesh1=scene1->CreateMeshBuilder("sword");
mesh1->LoadXFile("..//..//..//Media//sword.x",tvtrue,tvtrue);
//注意,这个x文件必须要能在程序中正常显示出来,而且最好是自带纹理的。(即x文件中已指明了纹理位置)
mesh1->SetMaterial(0,-1); //这好象是默认值。
//在渲染循环中不断得到actor2的某个骨骼矩阵给矩阵变量,然后把这个矩阵设给mesh.
man2->GetBoneMatrix(man2->GetBoneID("Bip01 R Hand"),&vector1,&matrix1);
//man2是个actor2或actor.
mesh1->SetMatrix(&matrix1);
mesh1->Render();
********************
这样就可以了,这个x文件形成的mesh将随着actor2的动作而动作,大小而大小。
以下是要点:
1、先要定义D3DMATRIX;
2、怎样得到骨骼呢?用ID的话恐怕记不住,用actor2->GetBoneID("名称")当然好,
但是怎么知道骨骼的名称呢?简单,用MilkShape3D将MDL文件反编译后再打开身体的MDS文件,然后找到
骨骼的名称就可以了,一般用手掌。
3、这里的那个vector好象返回值是错的,但是不用担心,反正这里用不着。
4、mesh1->rotateX(...),这样的函数可以保证mesh先旋转一定的度数再跟着matrix转,如果用setrotate(...),那么渲染出的mesh就会方向始终不变。
5、mesh1->MoveRelative(up,left,straf)是用来进行绑定位移的,即绑定后的物体会动作仍然跟随,而位置不再固定于被绑物上面了,front代表前后,up代表上下,straf代表平移.
- 将x文件绑在mdl手上
- MDL
- MDL
- MDL
- MDL
- MDL
- 读取MDL文件与骨骼控制
- 魔兽3模型文件 MDL 格式说明
- CS中mdl文件的解析
- Kaldi mono phone文件 0.mdl分析
- 在mdl中的Qt消息重定位
- cocos2d-x绑lua的开发环境
- cocos2d-x绑lua的开发环境
- cocos2d-x绑lua的开发环境
- cocos2d-x绑lua的开发环境
- cocos2d-x绑lua的开发环境
- cocos2d-x绑lua的开发环境
- cocos2d-x绑lua的开发环境
- 僵尸进程解决方法
- 各种碰撞
- 国外代码
- 基本数学函数
- C++代码优化方法总结
- 将x文件绑在mdl手上
- 改变文本控件字体
- VC:CString用法整理(转载)
- 矩阵
- VC的若干实用小技巧 (如何干净的删除一个类)
- 新题库
- VC定时器SetTimer函数
- (wonderful blog)个人开发历程知识库
- 【数论 / 数值】【RQNOJ】大合数分解