DirectX骨骼动画演示,和渐进网格和增进网格的演示
来源:互联网 发布:网络写手新手指南 编辑:程序博客网 时间:2024/05/01 16:54
DirectX骨骼动画演示,和渐进网格和增进网格的演示
未处理的网格
线框模式下的网格
没有简化后的飞机模型
简化后的飞机模型
经过5级增进后的网格(中间的一男一女,)在线框模式下,也能表现出面填充模式的效果
自己封装类三个类:网格类,辅助渲染类,和骨骼动画类,给出主框架类代码
//-----------------------------------------------------------------------------//类名: CD3DFrame 主框架类(独立类)//描述: 用于搭建游戏主框架//文件:D3DFame.h//作者: CYM//-----------------------------------------------------------------------------#pragma once#include "../JOYO_CYM/Engine.h"#pragma comment(lib, "lib/JOYO_CYM.lib")#include "d3d9.h"#include "d3dx9.h"class CD3DFrame{public:CD3DFrame(void);~CD3DFrame(void);//D3D框架函数bool Starengine(void);bool Shutengine(void);bool Setup(void);bool Display(void);bool Inputmsg(void);bool Cleanup(void);public:HWNDm_hWnd;//应用程序窗口句柄MSGm_struMsg;//应用程序消息WNDCLASSm_struWndclass;//应用程序窗口类IDirect3DDevice9*m_Device;//D3D设备对象//-----------------//用户数据定义再此//-----------------public://----------------------------------------------------------------------//游戏引擎数据//----------------------------------------------------------------------//渲染库CRenderAssist*m_RenderAssist;//辅助渲染类CRenderMesh*m_RenderMesh;//网格渲染类CRenderAnimMesh*m_RenderAnimMesh;//骨骼动画类public://----------------------------------------------------------------------//游戏项目相关数据//----------------------------------------------------------------------ID3DXFont*m_pFont1;//字体CYMLightm_Light1;//灯光CYMMaterialm_Material1;//材质CYMText2Dm_Text2D1;//2D文本CYMStancem_Stance1;//角色姿态1CYMMeshm_Bigship1;//模型飞机1CYMStancem_Stance2;//角色姿态2CYMMeshm_Windowmodel2;//橱窗模特2CYMStancem_Stance3;//角色姿态3CYMAnimMeshm_Tiny3;//Tiny:骨骼动画CYMStancem_Stance4;//角色姿态4CYMAnimMesh m_Warrior4;//Warrior:骨骼动画/*//网格加载相关的数据ID3DXMesh*m_pBigship1;//茶壶网格对象1D3DMATERIAL9*m_pMtrMesh1;LPDIRECT3DTEXTURE9*m_pTexMesh1;DWORDm_numMtrMesh1;*/};
//-----------------------------------------------------------------------------//类名: CD3DFrame 主框架类(独立类)//描述: 用于搭建游戏主框架//文件:D3DFame.cpp//作者: CYM//-----------------------------------------------------------------------------#include "D3DFrame.h"//-----------------------------------------------------------------------------//初始化D3DFrame主框架类的相关数据//-----------------------------------------------------------------------------CD3DFrame::CD3DFrame(void){m_Device=NULL;}//-----------------------------------------------------------------------------//释放D3DFrame主框架类的相关资源及数据//-----------------------------------------------------------------------------CD3DFrame::~CD3DFrame(void){Release<IDirect3DDevice9*>(m_Device);}//-----------------------------------------------------------------------------// 名字: CD3DFrame类 启动引擎函数// 描述: 用于创建引擎组成的类和初始化//-----------------------------------------------------------------------------bool CD3DFrame::Starengine(void){//创建渲染库类m_RenderAssist=NULL;m_RenderAssist = new CRenderAssist();m_RenderAssist->InitD3D(m_hWnd,true,CYM_Widthx2,CYM_Heightx2,0/*第一块显卡*/,D3DDEVTYPE_HAL,&m_Device);//创建网格渲染类m_RenderMesh=NULL;m_RenderMesh = new CRenderMesh(m_Device);//创建骨骼动画类m_RenderAnimMesh=NULL;m_RenderAnimMesh = new CRenderAnimMesh(m_Device);//---------------//创建数学库类//---------------return true;}//-----------------------------------------------------------------------------// 名字: CD3DFrame类 关闭引擎函数// 描述: 用于释放引擎的相关资源//-----------------------------------------------------------------------------bool CD3DFrame::Shutengine(void){//关闭渲染库类(s)Delete<CRenderAssist*>(m_RenderAssist);Delete<CRenderMesh*>(m_RenderMesh);Delete<CRenderAnimMesh*>(m_RenderAnimMesh);return true;}//-----------------------------------------------------------------------------// 名字: CD3DFrame类 加载用户资源函数// 描述: 加载程序运行所需要的资源//-----------------------------------------------------------------------------bool CD3DFrame::Setup(void){//---------------//创建灯光//---------------//灯光的各项值都为默认值m_RenderAssist->SetEnableLight(0,&m_Light1,true);//---------------//创建材质//---------------//材质的各项值都为默认值//m_RenderAssist->SetMaterial(&m_Material1);//---------------//创建2D文字//---------------//创建字体1ID3DXFont接口m_pFont1=NULL;D3DXCreateFont(m_Device,25,12,600,0,false,DEFAULT_CHARSET,OUT_DEFAULT_PRECIS,DEFAULT_QUALITY,0,"宋体",&m_pFont1);m_RenderAssist->SetText2DPara(&m_Text2D1,TP_FONT,m_pFont1);//---------------------//创建角色姿态Stance//---------------------//设置模型飞船姿态m_RenderAssist->SetStancePara(&m_Stance1,SP_YAWPITCHROLL,D3DXVECTOR3(1.0f,1.0f,1.0f));m_RenderAssist->SetStancePara(&m_Stance1,SP_VECPOS,D3DXVECTOR3(0.0f,0.0f,-50.0f));m_RenderAssist->SetStancePara(&m_Stance1,SP_SCALE,D3DXVECTOR3(1.0f,1.0f,1.0f));//设置橱窗模特姿态m_RenderAssist->SetStancePara(&m_Stance2,SP_YAWPITCHROLL,D3DXVECTOR3(0.0f,0.0f,0.0f));m_RenderAssist->SetStancePara(&m_Stance2,SP_VECPOS,D3DXVECTOR3(0.0f,-1.0f,-95.0f));m_RenderAssist->SetStancePara(&m_Stance2,SP_SCALE,D3DXVECTOR3(1.0f,1.0f,1.0f));//设置Tiny小人物姿态(骨骼动画)m_RenderAssist->SetStancePara(&m_Stance3,SP_YAWPITCHROLL,D3DXVECTOR3(4.14f,-3.14f,0.0f));m_RenderAssist->SetStancePara(&m_Stance3,SP_VECPOS,D3DXVECTOR3(0.0f,-1.0f,95.0f));m_RenderAssist->SetStancePara(&m_Stance3,SP_SCALE,D3DXVECTOR3(0.1f,0.1f,0.1f));//设置Warrior战士姿态(骨骼动画)m_RenderAssist->SetStancePara(&m_Stance4,SP_YAWPITCHROLL,D3DXVECTOR3(0.0f,0.0f,0.0f));m_RenderAssist->SetStancePara(&m_Stance4,SP_VECPOS,D3DXVECTOR3(-0.20f,-6.0f,-96.0f));m_RenderAssist->SetStancePara(&m_Stance4,SP_SCALE,D3DXVECTOR3(0.05f,0.05f,0.05f));//-----------------------//设置X网格网格对象//-----------------------//载入飞船模型(演示渐进网格)m_RenderMesh->CreateMeshFromX(&m_Bigship1,D3DXMESH_MANAGED,"Model\\Bigship1\\","Model\\Bigship1\\bigship1.x");m_RenderMesh->OptimizeMeshInplace(&m_Bigship1,D3DXMESHOPT_ATTRSORT|D3DXMESHOPT_COMPACT|D3DXMESHOPT_VERTEXCACHE);m_RenderMesh->GenerateProgressMesh(&m_Bigship1,D3DXMESHSIMP_FACE,0,0,1);//载入橱窗模特模型(演示增进网格)m_RenderMesh->CreateMeshFromX(&m_Windowmodel2,D3DXMESH_MANAGED,"Model\\Windowmodel\\","Model\\Windowmodel\\Windowmodel.x");m_RenderMesh->OptimizeMeshInplace(&m_Windowmodel2,D3DXMESHOPT_ATTRSORT|D3DXMESHOPT_COMPACT|D3DXMESHOPT_VERTEXCACHE);//m_RenderMesh->GenerateProgressMesh(&m_Windowmodel2,D3DXMESHSIMP_FACE,0,0,1);m_RenderMesh->GenerateEnhancedMesh(&m_Windowmodel2,true,1.0f);//增进网格//-------------------------------//载入创建骨骼动画//-------------------------------//载入Tiny小人物m_RenderAnimMesh->CreateAnimMeshFromX(&m_Tiny3,D3DXMESH_MANAGED,NULL,"AnimMesh\\Tiny\\","AnimMesh\\Tiny\\tiny_4anim.x");m_RenderAnimMesh->SetAnimationSetByName(&m_Tiny3,"Jog",0.008f);//载入Warrior战士m_RenderAnimMesh->CreateAnimMeshFromX(&m_Warrior4,D3DXMESH_MANAGED,NULL,"AnimMesh\\Warrior\\","AnimMesh\\Warrior\\warrior.x");m_RenderAnimMesh->SetAnimationSetByName(&m_Warrior4,"stay",0.008f);//设置默认的渲染方式\摄像机\投影矩阵\纹理过滤方式m_RenderAssist->RunOnceTimeSetting(1,1,1,1);return true;}//-----------------------------------------------------------------------------// 名字: CD3DFrame类 释放用户定义的资源函数// 描述: 用于释放一些全局的内存和资源//-----------------------------------------------------------------------------bool CD3DFrame::Cleanup(void){Release<ID3DXFont*>(m_pFont1);return true;}//-----------------------------------------------------------------------------// 名字: CD3DFrame类 图形显示函数// 描述: 绘制渲染所要显示的相关动画//-----------------------------------------------------------------------------bool CD3DFrame::Display(void){ //清空后台缓冲区 m_Device->Clear( 0, NULL, D3DCLEAR_TARGET | D3DCLEAR_ZBUFFER, D3DXCOLOR(0.0,0.0,0.0,1.0), 1.0f, 0 ); //开始在后台缓冲区绘制图形 m_Device->BeginScene(); //绘制文字static float xPos=10.0f,yPos=10.0f;m_RenderAssist->DrawText2D(&m_Text2D1,"骨骼动画演示及渐进网格和增进网格演示",xPos,yPos);m_RenderAssist->DrawText2D(&m_Text2D1,"封装了三个类!`网格类,辅助渲染类,骨骼动画类",xPos,yPos+25.0f);//设置模型飞船姿态m_RenderAssist->SetStance(&m_Stance1);//绘制飞船所有网格子集m_RenderMesh->DrawMeshSubset(&m_Bigship1,DRAWMESHTYPE_PMESH,CYM_All);//设置橱窗模特姿态m_RenderAssist->SetStance(&m_Stance2);//绘制橱窗模特所有网格子集m_RenderMesh->DrawMeshSubset(&m_Windowmodel2,DRAWMESHTYPE_EMESH,CYM_All); //设置Tiny小人物姿态(骨骼动画)m_RenderAssist->SetStance(&m_Stance3);//绘制骨骼动画m_RenderAnimMesh->AdvanceTime(&m_Tiny3,0.008f,NULL);m_RenderAnimMesh->DrawAnimMesh(&m_Tiny3,&m_Stance3.Matrix);//设置Warrior战士姿态(骨骼动画)m_RenderAssist->SetStance(&m_Stance4);//绘制骨骼动画m_RenderAnimMesh->AdvanceTime(&m_Warrior4,0.008f,NULL);m_RenderAnimMesh->DrawAnimMesh(&m_Warrior4,&m_Stance4.Matrix);m_Device->EndScene(); //将在后台缓冲区绘制的图形提交到前台缓冲区显示 m_Device->Present( NULL, NULL, NULL, NULL );return true;}//-----------------------------------------------------------------------------// 名字: CD3DFrame类 外部硬件设备消息处理函数// 描述: 用于处理外部设备的消息如:鼠标键盘等//-----------------------------------------------------------------------------bool CD3DFrame::Inputmsg(void){//设置渐进网格的简化值static DWORD face1=0;static float face2=1.0f;m_RenderMesh->GetNumFacesP(&m_Bigship1,&face1);//face2=m_Windowmodel2.pPMesh->GetNumFaces(); if (::GetAsyncKeyState(VK_UP) & 0x8000f){ face1+=8; face2+=0.01f;} if (::GetAsyncKeyState(VK_DOWN) & 0x8000f) { face1-=8; face2-=0.01f; }m_RenderMesh->SetNumFacesP(&m_Bigship1,face1);//m_RenderMesh->SetNumFaces(&m_Windowmodel2,face2);//增进网格(完成)if(::GetAsyncKeyState(VK_UP) & 0x8000f){m_RenderMesh->GenerateEnhancedMesh(&m_Windowmodel2,false,face2);}if (::GetAsyncKeyState(VK_DOWN) & 0x8000f) {m_RenderMesh->GenerateEnhancedMesh(&m_Windowmodel2,false,face2);}//切换渲染模式 if (::GetAsyncKeyState('F') & 0x8000f){m_Device->SetRenderState(D3DRS_FILLMODE, D3DFILL_WIREFRAME);} if (::GetAsyncKeyState('S') & 0x8000f){m_Device->SetRenderState(D3DRS_FILLMODE, D3DFILL_SOLID);}return true;}
- DirectX骨骼动画演示,和渐进网格和增进网格的演示
- DirectX骨骼动画,地形,级球形天空体的演示
- 网格布局的演示代码
- 最新骨骼动画的演示程序。
- DX骨骼动画,地形简单的演示
- 【阅读笔记之十二】《DIRECTX.9.0.3D游戏开发编程基础》:网格(二)浅话X文件和渐进网格
- DirectX学习笔记(十二):网格进阶之(XFile文件导入、渐进网格原理及外接体的)实现
- 多重网格、自适应网格和无网格
- 百度博客 多骨骼动画网格模型
- DirectX 3D_实践之DirectX3D中渐进网格的使用
- java GridLayout布局 网格布局演示
- 网格的语言和行动
- DirectX 3D_实践之DirectX3D 网格的外接体的创建和使用
- DirectX 3D_基础之网格应用 XFile XFile材质 生成顶点法向量 渐进网格 生产渐进网格 顶点属性权值 ID3DXPMesh接口
- 逆天的骨骼动画工具 Spine 把2D画皮3D网格化。
- 网格动画
- CSS网格布局和定位网格项
- WinForm 标尺和网格
- 校园迷宫(rqnoj195)
- 求最大子序列和
- POJ 1861 Network (MST kruskal 加权合并 (瓶颈生成树))
- 美国西点军校的育人之道
- ARM-Linux驱动--Watch Dog Timer(看门狗)驱动分析
- DirectX骨骼动画演示,和渐进网格和增进网格的演示
- 系统架构之一(RPG游戏常用架构)
- 对比.net使用Java的匿名类对工厂方法模式提供更优雅的实现
- 如何显示维基百科图片
- C++读写文本
- 线程例题2(如何实现下载进度条)
- 美好的时节,龌龊的现实
- LOVE WHAT I DO
- VC++程序从OpenCV2.1迁移到OpenCV2.2(vs2010+OpenCV2.2+windows7设置)