Irrlicht学习之载入网格(mesh)文件
学习Irrlicht载入网格文件,其实非常简单。通过我仿照例子写的一段代码,很简单地载入网格文件。
首先向大家介绍一下如何利用Irrlicht的源代码和doxygen生成帮助文档。进入irrlicht目录,在irrlicht-1.7.3/scripts/doc/irrlicht中,Windows下点击makedocumentation.bat,Linux下点击makedocumentation.sh,就可以根据代码生成帮助文档了。帮助文档在irrlicht-1.7.3/doctemp/html,找到index.html即可查看。下面是相关的截图:
载入网格文件非常简单。下面直接贴出代码:
#include <irrlicht.h>
// 针对Windows系统的配置
#ifdef _IRR_WINDOWS_
#pragma comment( lib, "Irrlicht.lib" )
#pragma comment( linker, "/subsystem:windows /ENTRY:mainCRTStartup" )
#endif
// 定义空指针
#ifndef nullptr
#define nullptr 0
#endif
using namespace irr;
using namespace core;
using namespace video;
using namespace scene;
int main( int argc, char** argv )
{
IrrlichtDevice* pDevice = createDevice(
EDT_OPENGL, // 渲染设备
dimension2d<u32>( 640, 480 ), // 宽和高
16, // 颜色位
false, // 是否全屏
false, // 模版缓存
false, // 垂直同步
nullptr ); // 事件接收器
if ( pDevice == nullptr ) return -1;
IVideoDriver* pDriver = pDevice->getVideoDriver( );
ISceneManager* pSMgr = pDevice->getSceneManager( );
IAnimatedMesh* pMesh = pSMgr->getMesh( "sydney.md2" );
ISceneNode* pNode = pSMgr->addMeshSceneNode( pMesh );
if ( pNode != nullptr )
{
pNode->setMaterialFlag( EMF_LIGHTING, false );// 不接收光
pNode->setMaterialFlag( EMF_ANISOTROPIC_FILTER, true );// 使用各向异性过滤
pNode->setMaterialTexture( // 设置纹理
0, // 纹理层
pDriver->getTexture( "sydney.bmp" ) ); // 纹理的路径
}
pSMgr->addCameraSceneNode(// 创建一个PVU摄像机(Position-View-Upward)
nullptr,
vector3df( 0.0f, 30.0f, 60.0f ),
vector3df( 0.0f, 0.0f, 0.0f ) );
while ( pDevice->run( ) )
{
pDriver->beginScene(
true, // 后台缓存
true, // Z缓存
SColor( 255, 255, 255, 255 ) ); // 填充颜色
pSMgr->drawAll( );
pDriver->endScene( );
}
return 0;
}
演示程序和源代码下载地址:这里