游戏开发学习笔记-4.加载X模型
来源:互联网 发布:udid定制后台源码 编辑:程序博客网 时间:2024/06/07 20:35
继续充实我们的引擎类!
上一篇顶点类绘画只是作为一个DEMO,不写入引擎类,因此,此次已经顶点类的移除!如果后续需要,再考虑增加!
这次主要实现X模型加载功能。
首先增加了一个定义文件,用于定义我们的模型。
#ifndef _DEFINES_H_#define _DEFINES_H_#include "Functions.h"struct Model {D3DMATERIAL9* pMaterials; //材质数组指针LPDIRECT3DTEXTURE9* pTextures; //纹理数组指针DWORD MaterialCount; //材质纹理数量LPD3DXMESH Mesh; //网格对象void Release() //释放指针{SAFE_DELETES(pMaterials);SAFE_DELETES(pTextures);}};#endif
之后是载入模型的封装的具体实现
//载入模型bool Engine::LoadModel( LPCSTR filePath,Model* pModel ){LPD3DXBUFFER Material;DWORD dwCount;LPD3DXMESH mesh;D3DXMATERIAL* pMaterial;//从文件加载模型if (FAILED(D3DXLoadMeshFromX(filePath,D3DXMESH_MANAGED,m_Dev,NULL,&Material,NULL,&dwCount,&mesh))){return false;}//获取模型数据pMaterial=(D3DXMATERIAL*)Material->GetBufferPointer();pModel->MaterialCount=dwCount;pModel->Mesh=mesh;pModel->pMaterials=new D3DMATERIAL9[dwCount]; //初始化材质数组pModel->pTextures=new LPDIRECT3DTEXTURE9[dwCount]; //初始化纹理数组for (DWORD i=0;i<dwCount;i++){pModel->pMaterials[i]=pMaterial[i].MatD3D; //材质对象pModel->pMaterials[i].Ambient=pModel->pMaterials[i].Diffuse; //环境光等于漫反射光pModel->pTextures[i]=NULL;//从文件创建纹理if (FAILED(D3DXCreateTextureFromFile(m_Dev,pMaterial[i].pTextureFilename,&(pModel->pTextures[i])))){char chText[128];sprintf(chText,"加载纹理文件 %s 失败!",pMaterial[i].pTextureFilename);ShowMessage(chText);return false;}}return true;}
然后是画模型实现
此方法需要一个我们自定义的模型结构指针
//画模型void Engine::DrawModel( Model* pModel ){for (DWORD i=0;i<pModel->MaterialCount;i++){//设置材质m_Dev->SetMaterial(&(pModel->pMaterials[i]));//设置纹理m_Dev->SetTexture(0,pModel->pTextures[i]);//画子模型pModel->Mesh->DrawSubset(i);}}
然后是main函数, 定义了一个模型对象,和3个看名知意的函数
Engine engine; //引擎对象Model pModel; //模型//游戏初始化bool GameInit(HWND hwnd);//游戏循环void GameLoop();//游戏结束void GameEnd();
修改的地方在于,将原来的引擎初始化,关闭,函数移入了这3个函数中。
//Game循环void GameLoop(){engine.ClearScreen();engine.StartRender(); //开始渲染engine.DrawModel(&pModel);engine.EndRender(); //结束渲染}//Game开始bool GameInit(HWND hwnd){if (!engine.Init(hwnd,WIN_WIDTH,WIN_HEIGHT)){return false;}if (!engine.LoadModel("edificio1.X",&pModel)){ShowMessage("载入模型失败!");return false;}return true;}//GameOvervoid GameEnd(){//模型释放pModel.Release();//关闭引擎engine.Shutdown();}
最后是释放指针的宏
#ifndef _FUNCTIONS_H_#define _FUNCTIONS_H_#include <windows.h>#define SAFE_RELEASE(P) {if (P!=NULL){P->Release();P=NULL;}}#define SAFE_DELETE(P) {if (P!=NULL){delete P; P=NULL;}}#define SAFE_DELETES(P) {if (P!=NULL){delete[] P; P=NULL;}}void ShowMessage(LPCSTR lpStr);#endif
载入模型之后,却还是不能看到模型,那是因为还没有经过矩阵的变换,下一篇,矩阵变换
源代码下载:
http://download.csdn.net/detail/qq578023708/8796929
0 0
- 游戏开发学习笔记-4.加载X模型
- cocos2d-x游戏开发学习笔记
- Cocos2d-x游戏开发学习笔记
- Netty 4.x学习笔记 - 线程模型
- 《Cocos2d-x游戏开发之旅》学习笔记(一)
- 《cocos2d-x游戏开发之旅》学习笔记(二)
- Cocos2d-x游戏开发之Lua学习笔记
- 【麦可网】Cocos2d-X跨平台游戏开发学习笔记---第二课:游戏开发技术
- cocos2d-x 3.x游戏开发学习笔记(1)--mac下配置cocos2d-x 3.x开发环境
- cocos2d-x 3.x游戏开发学习笔记(1)--mac下配置cocos2d-x 3.x开发环境
- cocos2d-x 3.x游戏开发学习笔记(1)--mac下配置cocos2d-x 3.x开发环境
- cocos2d-x 3.x游戏开发学习笔记(1)--mac下配置cocos2d-x 3.x开发环境
- 火云开发课堂 - 《使用Cocos2d-x 开发3D游戏》系列 第五节:模型的加载与渲染
- Direct-X学习笔记--X模型导入
- 游戏开发 学习笔记
- cocos2d-x笔记(八)Lua开发飞机大战-2-游戏加载界面
- cocos2d-x 3.x游戏开发学习笔记(2)--cocos2d-x 3.x文件目录结构分析
- 【麦可网】Cocos2d-X跨平台游戏开发学习笔记---第一课:游戏原理与机制
- 七牛curl命令实现上传和下载
- 两个链表的第一个公共结点
- 在mysql的命令行中设置字符集
- 浅析数据库连接池(二)
- leetcode 日经贴,Cpp code -Implement Stack using Queues
- 游戏开发学习笔记-4.加载X模型
- MATLAB中feval、class、'function_handle'、isa、strcmp的用法
- 基于FSL的DTI数据预处理流程
- mybatis中关于sqlMapConfig配置
- Java程序员应当掌握的排序算法
- python openpyxl读写excel
- Object C学习笔记3-对象的使用和定义
- Linux学习笔记(06-11)线程优先级
- Qt图形框架资料07 -- Qt图形视图QGraphicsItem类