官网:http://irrlicht.sourceforge.net/
把所有官方 Tutorial 跑一遍,可以感受到作者对 OpenGL 底层的封装,一些思路。对 Irrlicht 的能力,也能有一个整体感知。 截图有点困难,还专门写了一个小程序完成截图,每个 demo 都截了动态图,便于查阅。
花了两天完成,Irrlicht 3D 所有 Tutorial 动态图概览。🐬
version | svn addr | note |
---|---|---|
下一个版本 | svn://svn.code.sf.net/p/irrlicht/code/trunk | 可能不稳定或存在 api 变更 |
1.8.5 bugfix | svn://svn.code.sf.net/p/irrlicht/code/branches/releases/1.8 | 推荐这个 |
OpenGL ES | svn://svn.code.sf.net/p/irrlicht/code/branches/ogl-es | 实验性质 |
irr | Everything |
irr::core | vectors, planes, arrays, lists, and so on |
irr::gui | graphical user interface |
irr::io | Reading and writing files, accessing zip archives, xml files, .. |
irr::scene | Mesh loading, special scene nodes like octrees and billboards, .. |
irr::scene::quake3 | Quake3 map (.bsp) |
irr::video | video driver |
#ifdef _IRR_WINDOWS_
#pragma comment(lib, "Irrlicht.lib")
#pragma comment(linker, "/subsystem:windows /ENTRY:mainCRTStartup")
#endif
int main();
Name | Summary | Difficulty | Shot |
---|---|---|---|
1.HelloWorld | VideoDriver, GUIEnvironment and SceneManager. | 简单 | |
2.Quake3Map | 加载 Quake 3 map,创建 SceneNode 并优化渲染速度,创建可控相机位。 | 简单 | |
3.Custom SceneNode | 创建定制的 scene node,shader 写的。 | 高级的 | |
4.Movement | 移动 SceneNode,创建 SceneNode 动画 SceneNodeAnimators,也可以通过键盘控制移动。 | 简单 | |
5.User Interface | 用内建的 User Interface 创建 windows, buttons, scroll bars, static texts and list boxes。 | 平均的 | |
6.2D Graphics | 2d graphics, draw images, keycolor based sprites, transparent rectangles and different fonts. | 简单 | |
7.Collision | collision 检测,三种方法:stair climbing,拾取三角形,拾取 scene node。 | 平均的 | |
8.SpecialFX | 特效演示。深度缓冲阴影,粒子系统,广告牌,动态光,水表面。 | 平均的 | |
9.MeshViewer | mesh viewer。涉及用户接口和场景管理。 | 高级的 | |
10.Shaders | shaders for D3D8, D3D9 and OpenGL。创建 shader material,关闭 texture mipmaps,使用 text scene nodes。 | 高级的 | |
11.Per Pixel Lighting | 复杂 material。用 normal maps and parallax mapping 计算每个像素的光照。烟雾的使用,和移动粒子系统。 | 平均的 | |
12.Terrain Rendering | 地形渲染。用地形三角进行物理碰撞检测。 | 简单 | |
13.Render To Texture | 渲染到一个纹理。使用 specular highlights。 | 平均的 | |
14.Win32 window | win32 窗口中使用引擎。 | 简单 | |
15.Load .irr file | 使用 .irr files。 | 简单 | |
16.Quake3Map Shader | q3 map 特效和加载。 | 平均的 | |
17.Hello World Mobile | Windows CE 样例。 | 高级的 | |
18.SplitScreen | split screen 演示。 | 平均的 | |
19.Mouse And Joystick | 手柄和鼠标的使用。 | 简单 | |
20.Managed Lights | 多光源管理。根据场景选择合适的光源。 | 高级的 | |
21.Quake3Explorer | q3 map 浏览器。可以完成管理。 | 高级的 | |
22.MaterialViewer | material 测试,可以手工编辑。 | 简单 | |
23.SMeshHandling | 手工创建 meshes,支持定制处理。 | 平均的 | |
24.CursorControl | 修改 鼠标 cursors。 | ||
25.XmlHandling | XML 的使用,可以用来加载和保存配置。 | ||
26.OcclusionQuery | 用 OcclusionQuery 渲染加速。超出视距的节点不绘制。 | ||
[27.PostProcessing] | 创建屏幕双缓冲。颜色反转,用 HLSL and GLSL 写的。 | ||
[28.CubeMapping] | cubemap textures 使用,和环境 mapping。 | ||
[29.HardwareSkinning] | HardwareSkinning | ||
[30.Profiling] | 一些 profiling tools。 | ||
[Demo] | 一个完整的游戏 demo。 |
Name | Summary | Difficulty | Shot |
---|---|---|---|
DevCpp | Dev C++ 使用。 | 简单 | |
Code::Blocks | Code::Blocks IDE 使用。 | 简单 | |
Codewarrior | Metroworks Codewarrior 使用。 | 简单 | |
ODE Integration | 物理引擎 ODE。 | 高级的 | |
Tokamak Integration | 物理引擎 Tokamak。 | 高级的 | |
PhysX Integration | 物理引擎 Ageia PhysX (Novodex)。 | 高级的 | |
Newton Integration | 物理引擎 Newton Game Dynamics。 | 高级的 | |
Newton DevC++ Integration | Dev-C++,物理引擎 Newton Physics SDK。 | 平均的 |
#ifdef _MSC_VER
#pragma comment(lib, "Irrlicht.lib")
#pragma comment(linker, "/subsystem:windows /ENTRY:mainCRTStartup")
#endif
#include <irrlicht.h>
#include "exampleHelper.h"
using namespace irr;
using namespace core;
using namespace scene;
using namespace video;
using namespace io;
using namespace gui;
int main() {
IrrlichtDevice* device = createDevice(video::EDT_OPENGL, dimension2d<u32>(640, 480), 16, false, false, false, 0);
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 Irrlicht with the burnings software renderer!", rect<s32>(10, 10, 260, 22), true);
const io::path mediaPath = getExampleMediaPath();
IAnimatedMesh* mesh = smgr->getMesh(mediaPath + "sydney.md2");
IAnimatedMeshSceneNode* node = smgr->addAnimatedMeshSceneNode(mesh);
if (node) {
node->setMaterialFlag(EMF_LIGHTING, false);
node->setMD2Animation(scene::EMAT_STAND);
node->setMaterialTexture(0, driver->getTexture(mediaPath + "sydney.bmp"));
}
smgr->addCameraSceneNode(0, vector3df(0, 30, -40), vector3df(0, 5, 0));
while (device->run()) {
driver->beginScene(ECBF_COLOR | ECBF_DEPTH, SColor(255, 100, 101, 140));
smgr->drawAll();
guienv->drawAll();
driver->endScene();
}
device->drop();
return 0;
}
VideoDriver, GUIEnvironment and SceneManager.
加载 Quake 3 map,创建 SceneNode 并优化渲染速度,创建可控相机位。
创建定制的 scene node,没有用到 shader。
移动 SceneNode,创建 SceneNode 动画 SceneNodeAnimators,也可以通过键盘控制移动。
用内建的 User Interface 创建 windows, buttons, scroll bars, static texts and list boxes。
2d graphics, draw images, keycolor based sprites, transparent rectangles and different fonts.
collision 检测,三种方法:stair climbing,拾取三角形,拾取 scene node。
特效演示。深度缓冲阴影,粒子系统,广告牌,动态光,水表面。
mesh viewer。涉及用户接口和场景管理。
shaders for D3D8, D3D9 and OpenGL。创建 shader material,关闭 texture mipmaps,使用 text scene nodes。
逐像素光照、雾、移动光、粒子。复杂 material。用 normal maps and parallax mapping 计算每个像素的光照。烟雾的使用,和移动粒子系统。 Irrlicht 学习笔记 (10)–PerPixelLighting
地形渲染。用地形三角进行物理碰撞检测。
渲染到一个纹理。使用 specular highlights。
win32 窗口中使用引擎。
使用 .irr files。
q3 map 特效和加载。
Windows CE 样例。
split screen 演示。分屏技术。将视口分为 4 部分,三个显示 fixed camera 和一个用户控制 camera。 Irrlicht 引擎学习笔记 (14)–Splitscreen
手柄和鼠标的使用。
多光源管理。根据场景选择合适的光源。
光源管理器。为了使用超过 8 个的灯光,注册一个可选光源管理器,允许可以在渲染的时候开关特定灯光。 如果没有注册光源管理器,默认的基于距离(距离照相机)的流程将被激活。
Irrlicht 引擎学习笔记 (15)–LightManager
q3 map 浏览器。可以完成管理。
material 测试,可以手工编辑。
手工创建 meshes,支持定制处理。
修改 鼠标 cursors。
XML 的使用,可以用来加载和保存配置。
用 OcclusionQuery 渲染加速。超出视距的节点不绘制。
创建屏幕双缓冲。颜色反转,用 HLSL and GLSL 写的。
cubemap textures 使用,和环境 mapping。
HardwareSkinning
一些 profiling tools。
一个完整的游戏 demo。
Usage: MeshConverter.exe [options] <srcFile> <destFile>
where options are
--createTangents: convert to tangents mesh is possible.
--format=[irrmesh|collada|stl|obj|ply]: Choose target format
如在室内场景管理中有两个经常用到的层次体系:BSP(Binary Space Partitioning) 树,这是八叉树的推广,和包围体树 (Boundingvolume tree)。前者用于加速剔除,而后者主要用于碰撞检测。
一般来说,对于室内场景使用 BSP 树,因为 1)室内场景遮挡比较严重,使用 BSP 树在特定的位置分割有助于提升效率;2)室内很可能朝某个方向延伸比较多,比如一条细长的走廊。 对于大规模室外场景,使用八叉树比较好,因为场景中的物体比较分散,而且不会出现太多的遮挡, 由于不用存储分割平面位置,使用八叉树这种规则的空间结构能够提高效率。 当然,如果这个大规模室外场景的物体主要集中在地面,使用四叉树进行空间管理会比较好。