下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
目录目录TOC\o"1-5"\h\z\o"CurrentDocument"I.Skinmesh的一些重要函数分析 2\o"CurrentDocument".先分析一下问题 2\o"CurrentDocument".先解析下每个参数 2\o"CurrentDocument"人物挂武器分析 3\o"CurrentDocument"地图随机位置移动 41.Skinmesh的一些重要函数分析(1).先分析一下问题在调试过程中发觉人物的动作指针一直不对劲..开始时候我没有太大的留意人物的动作就是觉得人物的动作时多余出来一部分..但后来发觉其实人物的动作不是多余而是人物调用的帧数不对..比如人物一个完整的动作需要10帧(0~9),那么它开始播放是从3~9,之后在回到0~2,之后又会发生变化..经过了一轮的调试之后终于找到了那个函数出问题.也找到了问题的所在.就是人物的动作的帧数一直没有置0,这是由于人物建模时候不标准所导致的原因..现在可以通过代码的形式强制置0;(2).先解析下每个参数STDMETHOD(CreateMeshContainer)(THIS_LPCSTRName,CONSTD3DXMESHDATA*pMeshData,CONSTD3DXMATERIAL*pMaterials,CONSTD3DXEFFECTINSTANCE*pEffectInstances,DWORDNumMaterials,CONSTDWORD*pAdjacency,LPD3DXSKININFOpSkinInfo,LPD3DXMESHCONTAINER*ppNewMeshContainer);下面是我一直调试的笔录..LPCSTRName:很奇怪,这个参数一直是空,即使把函数中给它赋值的语句注释掉也运作正常,貌似不用管...CONSTD3DXMESHDATA*pMeshData:一个D3DXMESHDATA结构体指针,结构内有一个D3DXMESHDATATYPE成员,此成员是一个枚举,枚举出三种MESH类型,在D3DXMESHDATATYPE结构内还有一个联合结构,在联合中有三种不同的MESH,相信是根据D3DXMESHDATATYPE的值来确定应该使用哪一种MESH吧.CONSTD3DXMATERIAL*pMaterials:同样是一个结构体指针,内含一个D3DMATERIAL9材质结构和一个纹理路径.CONSTD3DXEFFECTINSTANCE*pEffectInstances:貌似是一个处理音效的结构体,不太理解这东东,在两个例子中都没有使用到这个参数.DWORDNumMaterials:一个材质计数器,在函数中根据此值去new一个NumMaterials大小的D3DXMATERIAL数组.CONSTDWORD*pAdjacency:邻接三角形数组,根据网上资料,这个参数可以消除动画(关节动画)时所带来的裂缝.在MultiAnimation(DX)例子中,先创建了一个D3DXMESHCONTAINER对象(当然,这个对象是继承自D3DXMESHCONTAINER的子类),然后用该对象的MeshData.pMesh->GetNumFaces(取出MESH有多少个面,再用pMC->pAdjacency去new一个3*面数大小的数组,最后用参数中的pAdjacency拷贝给pMC->pAdjacency.参数中pAdjacency的值应该是由DX框架运算得来,暂不考究〜〜LPD3DXSKININFOpSkinInfo:蒙皮信息接口,根据此接口内的数据去设置第八个参数.此参数的运用将在最后结合整个函数语句分析中解析,而该接口也将另立文档分释LPD3DXMESHCONTAINER*ppNewMeshContainer:MESH动作播放容器,以上7个参数其实都是围绕着这个参数来写的(第一个不知道干啥子用),在函数中会创建一个D3DXMESHCONTAINER临时对象,然后将7个参数的值存到此对象中,最后将这个对象赋值给此参数,即此函数运行完毕后,会产生一个骨骼动画容器,而DX框架也将根据这个容器的数据进行运算.在看看这个函数HRESULTSetTrackPosition(UINTTrack, //动作轨迹,一般设为0,DOUBLEPosition//动作开始到结束的时间段);在boolCSkinMesh::SetAnimationName(constchar*strAnimName);调用下就OK人物挂武器分析由于代码不是英雄写的..所以有必要先介绍一下这个类由哪些函数组成..这类由.CMesh(LPDIRECT3DDEVICE9pDevice,char*strMesh);//构造函数.virtual~CMesh();//析构函数.voidSetPosition(floatx,floaty,floatz);//改变网格对象的位置.voidRender。;//渲染.voidGetBoundingBox(D3DXVECT0R3*pVmin,D3DXVECT0R3*pVmax);//获得模型的最大最小点.LRESULTSetTransForm(D3DMATRIX*pMat);//关节在skinmesh需要一个重要得函数LRESULTGetFrameMatrix(LPD3DXFRAMEpFrameBase,char*strFrameName,D3DMATRIX*pMat)这函数的作用是找到人物角色的各个关节点.武器就是通过这个接口来实现挂接.在实现上直接Render()就可以;m_pMesh-〉Render(fElapsedTime,m_matWorld,timeGetTime()/1000.0f);//角色D3DMATRIXmat;m_pMesh->GetFrameMatrix(NULL,"Bip01_R_Hand",&mat);//武器画在角色手上位置global.m_pMMesh->SetTransForm(&mat);//武器global.m_pMMesh-〉Render();地图随机位置移动1)需要注意2点:(1).//创建地形global.scene-〉m_pTerrain=newCTerrain(D3DXVECTOR3(0.0f,0.0f,0.0f));global.scene->m_pTerrain->Initialize(40,200,20);//设置英雄Y轴上点以地形的高度为准global.scene-〉m_pHero-〉SetPos(400.f,global.scene-〉m_pTerrain-〉GetHeight(500.0f,-500.0f),-100.f);(2).〃生成随机点if(global.input->KeyDown(DIK_3)){floati,k;sr
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 合同安全考核上限
- 工会代理记账合同
- 提现合同模板
- 2025年昭通货运资格证模拟考试
- 2025年青岛货运考试题库
- 2025年云南货运从业资格证试题和答案
- 2025年漯河货运从业资格证考试试题及答案
- 2025年甘肃道路货运驾驶员从业资格证考试
- 山西省旅游景点租赁合同
- 冷藏堆场租赁合同
- 心外科疾病知识讲座
- 商务ktv项目计划书
- 《微机系统与汇编语言》-课程设计-实时时钟的设计与实现
- 智能电网建设与发展趋势
- 门诊部预约诊疗制度
- 收发管理工作流程
- 幼儿园中班数学活动《数数有几个》
- 基于PLC的变频恒压供水控制系统设计
- 突发性耳聋的护理查房
- 物品移交接收单(模板)
- 小米科技公司的供应链管理策略分析(全面完整版)
评论
0/150
提交评论