• 【Irrlicht鬼火引擎】掌握引擎使用流程,入门程序HelloWorld


    分析

    一、简述使用步骤

    一般而言,对于一个简单的程序,Irrlicht引擎的一般使用步骤如下:

    预处理:
    (1)包含 <irrlicht.h> 头文件
    #include <irrlicht.h>
    (2)设置命名空间
    using namespace irr;
    设置命名空间会让之后的编程稍微轻松一点,就像使用C++进行编程时,使用using namespace std;一样,std::cout<<→cout<<。
    (3)通知编译器连接irr库文件
    #ifdef _IRR_WINDOWS_
    #pragma comment(lib, "Irrlicht.lib")
    #pragma comment(linker, "/subsystem:windows /ENTRY:mainCRTStartup")
    #endif
    如果不进行如上操作的话,在程序编译的过程中,会在Link部分报错。所以说这一步是非常重要的,一定不要忘记。

    到这里,预处理的步骤就完成了,接下来,我们要给程序提供一个main函数,作为程序的入口。
    在main函数中需要做的步骤如下:
    (1)创建设备
    (2)获取场景管理器,GUI环境,视频设备的指针,使用他们进行渲染控制
    (3)在device->Run()的情况下,进行循环。在driver->beginScene()和driver->endScene()中进行所有内容的渲染控制。(我们之前提到过,driver是IVideoDriver的指针,负责2D3D的渲染实现)
    (4)释放设备
    一般而言,使用device->drop();语句就实现了设备的释放。

    就这样,一个非常基本的基于Irrlicht引擎的程序就完成了,我们可以在这个基础之上,进行各种添加操作,比如说添加一个mesh模型,添加一个FPS摄像机,添加地形,添加天空盒等等。这些操作在未来的文章中会一一提到。

    二、helloWorld程序示例

    下面,为大家展示一个根据上边所述流程而写的简单程序,在程序中,在需要理解、注意的部分添加了注释,用来解释语句在程序中的作用,希望会对你的理解有所帮助!

    //引入头文件
    #include <irrlicht.h>  
    
    //设置命名空间,开始的时候进行如下声明,可以省去以后写irr::core:: 的麻烦  
    using namespace irr;  
      
    using namespace core;  
    /*scene是场景管理,包括场景节点,摄像机,例子系统,MESH,公告板,灯光,动画器,天空盒,地形等绝大部分
    
    的3D功能*/
    using namespace scene;  
    /*video主要负责对视频驱动的设置,2D和3D的渲染都在这里实现,包括了纹理,材质,灯光,图片,顶点等渲染属
    
    性的控制*/
    using namespace video;  
    using namespace io;  
    using namespace gui;  
      
    
    //为了能够使用Irrilcht.dll文件,要通知编译器连接Irrlicht.lib 库文件
    #ifdef _IRR_WINDOWS_  
    #pragma comment(lib, "Irrlicht.lib")  
    #pragma comment(linker, "/subsystem:windows /ENTRY:mainCRTStartup")  
    #endif  
      
    int main()  
    {  
    //创建设备
        IrrlichtDevice *device =  
            createDevice( video::EDT_SOFTWARE, dimension2d<u32>(640, 480), 16,  
                false, false, false, 0);  
      
        if (!device)  
            return 1;  
      
    //设置窗口名称
        device->setWindowCaption(L"Hello World! - Irrlicht Engine Demo");  
      
        IVideoDriver* driver = device->getVideoDriver();  
        ISceneManager* smgr = device->getSceneManager();  
        IGUIEnvironment* guienv = device->getGUIEnvironment();  
      
    //在窗口内添加一个静态文本
        guienv->addStaticText(L"Hello World! This is the Irrlicht Software renderer!",  
            rect<s32>(10,10,260,22), true);  
      
    //场景中加入摄像机,在(0,30,-40)位置,视点位置在(0,5,0)
        smgr->addCameraSceneNode(0, vector3df(0,30,-40), vector3df(0,5,0));  
      
        while(device->run())  
        {  
      
    //所有的绘制都必须在beginScene()和endScene()之间
    //beginScene()清空屏幕填补上颜色SColor(255,100,101,140)
            driver->beginScene(true, true, SColor(255,100,101,140));  
      
            smgr->drawAll();  
            guienv->drawAll();  
      
            driver->endScene();  
        }  
      
      //程序结束的时候,记得要删除设备对象
        device->drop();  
      
        return 0;  
    }  
  • 相关阅读:
    人工智能第一次作业
    在uni-app的textarea中输入纯数字或者英文不换行的问题
    uni-app实现选择图片上传并显示进度条
    减肥计划
    前端时间格式2020-02-11T12:24:18.000+0000转化成正常格式
    男孩和女孩
    java 获取当前年份 月份 日期
    深海收破烂
    如何爱一个人
    随手心情
  • 原文地址:https://www.cnblogs.com/tail/p/3191353.html
Copyright © 2020-2023  润新知