irrwowview

Tutorial 1: HelloWorld

Tutorial 1: HelloWorld
这教程演示如何设置IDE来使用IrrLicht引擎和如何用它来写一个HelloWorld程序。 这个程序将会演示如何用视频驱动(VideoDriver,界面环境(GUIEnvironment)和场景管理器(SceneManager.
本例子的效果图如下:

 

Setting up the IDE(设置IDE

要使用这个引擎,我们必须包含”IrrLicht.h”,这个文件可以在引擎sdkinclude目录找到。要设置一个能让编译器找到此头文件的目录。这对于每一个IDE和编译器是不同的。我简单说明一下在VC6.0VC.net中是如何设置的。

  • 如果使用的是VC6.0,工具->选项,选择那“目录”,和在目录组合框选“include files”,添加“irrlicht.h”所在目录;在目录组合框选“library files”,添加“irrlicht.lib”所在目录。

      
     
  • 如果使用的是VC.net,工具->选项->项目->VC++目录,在“显示以下内容的目录”组合框选“包含文件”,添加“IrrLicht.h”所在目录;在“显示以下内容的目录”组合框选“库文件”,添加“IrrLicht.lib”所在目录。

 

 

Lets start!(教程开始)

设置好IDE后,编译器就会知道引擎头文件的位置,我们可以在代码中包含这个头文件了。

#include <irrlicht.h>

IrrLicht引擎的所有东西都包含在命名空间“irr”中.如果你想使用这个引擎的类,你必须在类名前加上“irr::”。例如要使用IrrlichtDevice, 应该写: irr::IrrlichtDevice. 想不加前缀,可以在代码的开始处添加如下代码.

using namespace irr;

5个子命名空间在IrrLicht引擎,你可以查阅具体的说明在下以链接: 'Namespace List'.好像irr命名空间一样,你可能在代码的开始处加如下代码:

using namespace core;
using namespace scene;
using namespace video;
using namespace io;
using namespace gui;

我们要链接IrrLicht.lib才可以使用IrrLicht.dll。可以在项目中设置,但为了简单也可如下设置:

#pragma comment(lib, "Irrlicht.lib")

我们可以在任何平台中使用main函数作为程序的入口。而在Windows平台中,还可以使用WinMain函数,这样就可以不弹出控制台窗口。但在这里,为了使例子简单,我们使用main作为程序的入口:

int main()
{

'createDevice' 函数作为引擎最重要的函数。用这个函数创建IrrLicht设备作为根对象(root object)来控制引擎。 createDevice()7个参数:

  • deviceType: 设备类型。可以设置的类型有Null device, the Software device, Direct3D8, Direct3D9, or OpenGL. 在这里我们使用 EDT_SOFTWARE,当然还能使用以下的值EDT_NULL, EDT_DIRECT3D8, EDT_DIRECT3D9, or EDT_OPENGL(具体请查阅枚举E_DRIVER_TYPE的定义).
  • windowSize: 设定窗口的大小, 这里设为512x384(具体请查阅模板dimension2d的定义).
  • bits: 设定像素为16位或32位,这个参数在窗口模式时无效
  • fullscreen: 指定程序是否为全屏模式.
  • stencilbuffer: 指定是否使用模板缓存画阴影.
  • vsync: 指定是否使用垂直同步,只在全屏模式中有效.
  • eventReceiver: 一个接收事件的对象,在这里我们不使用,设为0.

IrrlichtDevice *device =
                    createDevice(EDT_SOFTWARE, dimension2d<s32>(512, 384), 16,
                               false, false, false, 0);

设置窗口的标题。留意在字符串前的LIrrLicht引擎使用宽字符显示文本。

device->setWindowCaption(L"Hello World! - Irrlicht Engine Demo");

获取视频驱动(video driver, 场景管理器(SceneManager,界面环境(graphical user interface environment)的指针,则不必经常调用device->getVideoDriver(), device->getSceneManager(), device->getGUIEnvironment().

IVideoDriver* driver = device->getVideoDriver();
ISceneManager* smgr = device->getSceneManager();
IGUIEnvironment* guienv = device->getGUIEnvironment();

我们使用界面环境(GUI environment)在窗口中添加一个静态文本.这个文本被放在左上角坐标为(1010)右下角坐标为(20022)的位置.

guienv->addStaticText(L"Hello World! This is the Irrlicht Software engine!",
           rect<int>(10,10,200,22), true);

使显示有趣,我们加载并显示一个QUAKE2的模型。我们只需使用场景管理器(Scene Manager)的 getMesh()获取一个网格(mesh)和并用addAnimatedMeshSceneNode() 函数添加场景节点(SceneNode)的去显示这个网格. getMesh()函数还支持的模型格式有Maya*.obj),Quake3*.bsp),Milshape*.ms3d)。顺带提一下,这个例子中如此COOL的模式名叫“sydney“是由Brian Collins制作的。

IAnimatedMesh* mesh = smgr->getMesh("../../media/sydney.md2");
IAnimatedMeshSceneNode* node = smgr->addAnimatedMeshSceneNode( mesh );

为了良好观察网格,我们对材质作了如下更改:我们取消灯光,因为在这里没有动态光,网格将会完全黑色。然后我们设置帧循环,在这里设置动画的帧循环为0-310。最后,设置那网格的纹理。如果没有纹理,网格将会只有一种颜色。

if (node)
{
          node->setMaterialFlag(EMF_LIGHTING, false);
          node->setFrameLoop(0, 310);   
          node->setMaterialTexture( 0, driver->getTexture("../../media/sydney.bmp") );
}

要观察到这个网格,我们在坐标(030-40)的地方向(050)放置一个摄像机。

smgr->addCameraSceneNode(0, vector3df(0,30,-40), vector3df(0,5,0));

我们已经设置好场景了,用如下的方法绘制每一件物体: while循环中运行设备直到关闭窗口或按ALT+F4

while(device->run())
{

每一件物体都在beginScene()和endScene()函数之间绘制。BeginScene用于设置一个颜色清理屏幕和设置深度缓存。然后我们绘制场景管理器和界面环境的内容。调用endScene把全部物体都显示在屏幕上

          driver->beginScene(true, true, SColor(255,100,101,140));

 

          smgr->drawAll();

 

          guienv->drawAll();

          driver->endScene();

 

}

在最后,我们必须删除之前使用createDevice()函数创建的设备。在IrrLicht引擎中,任何使用含有create的函数或方法创建的对象,都要调用->drop()函数删除。可查看 documentation 获得更详细的信息.

          device->drop();
 return 0;

 

}

就这样试试编译和运行一下。

 

posted on 2008-06-26 00:09 shjy 阅读(413) 评论(0)  编辑 收藏 引用


只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理