经过昨天比较枯燥的准备工作后,今天我们的目标是实现本地图片载入
3D
场景,主要内容是熟悉irrlicht引擎,创建一个3D窗口,并绘制图片。
总共有两个示例,源代码下载:
example_1.zip
example_2.zip
一、irrlicht 简介
irrlicht
游戏引擎的分成五大块:
•
Core:
容器类和数学库 namespace irr::core
•
Scene:
三维场景绘制和管理
namespace irr::scene
•
Video:
图片纹理的载入和管理
namespace irr::video
•
GUI:
二维
GUI
控件
namespace irr::gui
•
FileSystem:
文件系统读写
namespace irr::io
编写任何一个
irrlicht
程序,首先要获得设备指针 IrrlichtDevice* device:
video::E_DRIVER_TYPE driver_type = irr::video::EDT_OPENGL;
core::dimension2d<s32> screen_resolution = core::dimension2d<s32>(1280, 800);
u32 color_depth = 32;
bool is_full_screen = true;
IrrlichtDevice* device = irr::createDevice(driver_type, screen_resolution, color_depth,
is_full_screen);
driver_type为驱动类型,可以选择OPENGL,DX8 或 DX9。其余几个参数分别为分辨率,颜色深度,是否全屏。
s32, u32 为 irrlicht 定义的类型,分别对应 int 和 unsigned int。
获得 device 指针以后,就可以得到属于该 device 的四大块功能:
video::IVideoDriver* driver = device->getVideoDriver();
scene::ISceneManager* scene_mgr = device->getSceneManager();
gui::IGUIEnvironment* gui_env = device->getGUIEnvironment();
io::IFileSystem* file_system = device->getFileSystem();
通过 driver 载入图片和 texture,通过 scene_mgr 为3d场景添加 irrlicht 内置支持的 mesh 等工作完成后,即可进入主循环,主循环结束时,释放 device,程序结束。其中 beginScene 的参数 SColor(alpha, r, g, b) 为背景色。
while (device->run())
{
if (device->isWindowActive())
{
driver->beginScene(true, true, video::SColor(0, 0, 0, 0));
scene_mgr->drawAll();
gui_env->drawAll();
driver->endScene();
}
}
device->drop();
值得一提的是 drop() 函数。Irrlicht中大部分类都继承自一个 IReferenceCounted 的接口,类似智能指针。Irrlicht 中的惯例是不使用 delete 删除对象,而调用该接口的 drop() 函数。在添加对象的引用时,调用 grap() 函数。
二、创建3D场景
创建3D场景有三个步骤:(1) 通过scene_mgr添加3D物体;(2)为物体贴上纹理;(3) 添加Camera,使物体可见。
在 device->run() 之前添加如下代码
// 为场景添加一个立方体,边长100
scene::ISceneNode* cube = scene_mgr->addCubeSceneNode(100.0f);
// 载入纹理
video::ITexture* tex = driver->getTexture("box.jpg");
// 将纹理附加到立方体上
cube->setMaterialTexture(0, tex);
// 将纹理EMF_LIGHTING属性设为false
// 表示该纹理现实与光源无关,即为图片自身颜色
cube->setMaterialFlag(video::EMF_LIGHTING, false);
// 使纹理支持半透明,半透明效果与图片相同
cube->setMaterialType(video::EMT_TRANSPARENT_ALPHA_CHANNEL);
// 添加一个相机,在(700,700,-700)位置,往(0,0,0)位置拍摄。
scene::ICameraSceneNode* camera = scene_mgr->addCameraSceneNode(0,
core::vector3df(700,700,-700), core::vector3df(0,0,0));
至此,您应该可以看到一个立方体在场景中央。
三、创建
3DWall
Device的驱动为OPENGL,需要修改请转到 util.h 的GetDevice()函数中。
例子二中3D场景的创建,移到了era::wall::CWallManager 的 UpdateScene() 函数中:
video::ITexture* tex = era::Util::Instance()->GetDriver()->addTexture("", img);
core::vector3df size(img->getDimension().Width, img->getDimension().Height, 0.01);
wallitem = smgr->addCubeSceneNode(1, smgr->getRootSceneNode(), -1,
core::vector3df(400*(i/3),300*(1-(i%3)), 0), core::vector3df(0,0,0), size);
图片被当成 例子一 中 cube 的纹理,填在上面。
你也许会很奇怪,怎么这些 cube 都是扁扁的? 这都是addCubeSceneNode 的最后一个参数 size 的作用。 size将长宽设为图片相同,厚度为0.01. 这样在3D环境中就是个扁扁的图片了。
第四个参数决定了cube在3d场景中的位置core::vector3df(400*(i/3),300*(1-(i%3)), 0)。这样,图片按照如下顺序排列:
1 4 7 ....
2 5 8 ....
3 6 .......
还值得一提的是,为了节约内存,使用了缩略图。由于irrlicht自身的缩略图算法效率很低,因此程序运行起来,需要等待比较长的时间才能将图片全部载入。另外我在 util.h 编写了 FeatherEdge() 函数,为缩略图添加了阴影(效果并不是很好,但也还过得去了)。
编译运行后,您应该能看到如下画面:
今天就到这里,下一篇,我们让它动起来
。
- 大小: 8.1 KB
- 大小: 58.1 KB
分享到:
相关推荐
在"Irrlicht游戏引擎开发 cooliris 界面(三)"这个主题中,我们可能涉及到的是如何使用Irrlicht引擎构建一个酷似Cooliris的界面体验。Cooliris是一种创新的多媒体浏览界面,它以前所未有的方式展示了图像和视频内容...
《Irrlicht 3D游戏引擎入门指南》 Irrlicht,中文译为“鬼火”,是一款备受赞誉的开源3D游戏引擎。以其简洁的结构、高效的执行性能和易上手的特点,它不仅适合初学者学习3D游戏引擎的基础知识,也是小型3D应用开发...
总的来说,irrlicht 3D游戏引擎是学习和开发3D游戏的理想选择,无论你是初学者还是经验丰富的程序员,都能从中受益。通过深入探索这个源码包,你可以提升你的3D图形编程技能,了解游戏引擎背后的复杂机制,并可能...
Irrlicht游戏引擎自带了GUI模块,可以在三维的场景中创建二维的覆盖(Overlay),使得游戏中图标和文字的显示更为方便,配合游戏高效的三维渲染能力,相得益彰。 这一次我将尝试用代码对GUI进行显示,我们的目标是...
DirectX 3D游戏引擎Irrlicht教程合集
irrlicht引擎是一款强大的开源3D游戏引擎,专为实时3D渲染设计,广泛应用于游戏开发、虚拟现实场景和图形演示。这款引擎最初由Nikolai Ostertag开发,并在GPL许可证下发布,允许开发者自由地使用、修改和分发其源...
irrlicht3d 引擎是开源的3D图形库,专为实时应用,尤其是游戏开发设计。本项目“用IRRLICHT3D引擎写RPG游戏的框架”提供了一个完整的RPG游戏开发基础,包括工程文件和源代码,旨在帮助开发者快速构建自己的角色扮演...
irrlicht-1.6 是一个基于C++的开源游戏引擎,专为开发2D和3D游戏而设计。它的名称“irrlicht”在德语中意为“不真实的光”,暗示了它在渲染和光照方面的强大能力。该引擎最初由德国开发者Nikolaus Gebhardt在2003年...
在Qt中集成Irrlicht3D引擎,可以创建出丰富的3D图形用户界面,为桌面应用和游戏开发带来强大的视觉效果。Irrlicht是一个开源的3D渲染引擎,以其易于使用和高性能而受到开发者欢迎。Qt则是一个跨平台的C++开发框架,...
示例项目可以用来快速上手,理解如何使用Irrlicht引擎开发游戏。文档部分可能包含API参考、教程和用户指南,帮助初学者理解引擎的用法。 Irrlicht引擎的另一大优点是其易于集成到其他项目中。它提供了多种编程语言...
鬼火Irrlicht开源3D游戏引擎1.7.2 Irrlicht是一个开源的3D游戏引擎。它具有高效,实时等特点,是个完全跨平台的引擎,使用D3D、OpenGL和它的自己的渲染程序。支持动态的阴影,粒子系统,角色动画,室内和室外技术以及...
Irrlicht引擎是一款开源的3D游戏引擎,专为实时3D应用设计,如视频游戏、模拟软件等。这个教程集合提供了全面的学习资源,包括对Irrlicht Engine的深入理解和OpenGL开发环境的配置。 Irrlicht Engine的核心特性在于...
然而,因为Irrlicht主要由游戏名家Nikolaus Gebhardt所设计,所以该游戏在设计上十分连贯。你可以在网上到处发现有Irrlicht的增强程序,如可选用的地形生成器,入口生成器,输出器,world层生成器,相关教程和编辑器...
Irrlicht引擎是一个用C++书写的高性能实时的3D引擎,可以应用于C++程序或者.NET语言中。通过使用Direct3D(Windows平台),OpenGL 1.2或它自己的软件着色程序,可以实现该引擎的完全跨平台。尽管是开源的,该...
1. **游戏开发**:Irrlicht引擎在Android上的应用最常见的是游戏开发,如简单的3D跑酷游戏、冒险游戏等,利用其强大的图形渲染能力,可以快速构建出富有视觉冲击力的游戏场景。 2. **3D模型展示**:在工业设计、建筑...
Irrlicht 是一个开源的3D游戏引擎,专为实时3D图形渲染设计。这个引擎以其易用性、跨平台性和高效性能而受到开发者欢迎。在"Irrlicht 中文支持引擎"这个项目中,我们看到它已经集成了对中文输入和输出的支持,这意味...
Irrlicht引擎是一款开源的3D图形引擎,专为游戏开发和实时三维可视化设计。这个引擎以其易用性、跨平台性和高效性能而受到开发者们的欢迎。"Irrlicht引擎例子说明及中文"压缩包文件提供了关于如何使用Irrlicht引擎的...