1:
Irrlicht
引擎是什么?
Irr引擎是一个高性能,跨平台,开源的3D引擎。它能够帮助你进行实时3D程序的开发。它的主要目标是:方便使用,运行速度快,可扩展,线程安全。
这个引擎是一个非常灵活的引擎,可以使用它编写许多不同的应用程序。例如:复杂的3D仿真应用程序,第一和第三人称室内或室外射击游戏,策略游戏,2D游戏等等。
2:
我能够在不开源的商业程序中使用这个引擎吗?
你当然可以。Irr引擎是免费的,而且完全自由的。您可以随意的编辑修改它,但是你必须标注出你的修改部分。这个引擎是基于Zlib的版权声明的,既非GPL也非LGPL。更详细的情况,您可以查看内部的声明。
3:
我可以用
Irr
引擎做一款游戏吗?
当然可以,而且这会很简单。
但是,请注意:Irr不是一款游戏引擎,它仅仅进行了图象处理。做为一款游戏,你需要更多的部分,例如声音输出,网络和物理系统,也需要一些游戏相关的编辑器。您当然可以选择自己制作这些编辑器,但是Irr引擎已经有一些现成的编辑器和库可以提供给您使用,例如irrKlang, irrEdit。更详细的情况,您可以查看相关的说明。
4:
我可以为引擎做一些贡献吗?
5:
现在有很多其他的
3D
引擎可以使用,请问
Irr
引擎相对于其他
3D
引擎有什么优势?
容易使用。Irr引擎把所有常规的事情和绚丽的特效都已经做好了,您不需要花几天的时间去学习文档。例如:启动引擎,读取并显示一个Quake3的地图仅需要调用引擎6个函数,代码行数不超过10行,有兴趣的话,您可以查看sdk中的例子。
灵活性强。虽然引擎很方便使用,但是你能够很容易的修改它。
极其稳定。大部分实时程序在用户进行意外操作时会严重当机。但是Irr引擎不同,它会打印出一个警告信息,而应用程序大部分情况会继续运行。
快如闪电。(笃志注:真强的形容- -) 因为3D引擎的常见问题在于速度,而影响速度的主要原因在于大量的内置导入解析器,而Irr引擎可以直接的进行文件导入而没有使用任何转换器,节省了大量的编译时间。它支持下列格式(.3ds, .md2, .obj, .pk3, .ms3d, .bsp, .x, .bmp, .tga, .jpg, .psd, .pcx等等)
平台独立性。Irr引擎可以在众多平台上使用。
独立API。因为有很多种设备类型,Irr引擎支持多种API,当前来说是支持OpenGL,D3D8和D3D9设备,一个空设备和两种软件模拟设备。甚至,在渲染的时候也允许进行设备类型的更换。
不依赖其他库。Irr引擎sdk不需要其他库的支持。例如,即使用户系统中没有DirectX,引擎也能顺利运行。
完善的文档。(笃志注:这条…有点名不其实了吧,Demo还不少,但文档却难得一见。)大量的例子和Demo,并且提供了一些你在3D程序中常用的工具,于是你无需新建项目来做这些工作。它包括(GUI系统工具,Font生成工具..等)
开源。这个引擎是完全免费并且开源的。你可以随意的修改它,但是你必须标注出你的修改部分。这个引擎是基于Zlib的版权声明的,既非GPL也非LGPL。
6:
为什么这款引擎这么快?
很多朋友给我写信说:他们使用了一些3D引擎,而Irr引擎是最快的,为什么这款引擎会这么快呢?实话说,我也不知道明确的原因,但是有以下这些可能:
Irr引擎没有象其他大部分引擎那样使用保守的拣选运算,而新式的数学拣选更加适合现代的3D硬件。它默认的是使用16位纹理图,引擎在解析和显示这些图片时候会比其他引擎快些。
Irr引擎没有使用其他比较慢的库,大部分事情都在引擎核心中实现的。
7:
这个引擎能够渲染多少个面?
无限。OK,是接近无限。真正的限制在你的硬件。所以,根据你的需要尽管在程序中加入大量的模型面吧,只要你的游戏不卡。有些朋友问我,为什么教学例子中定义最大面数为10000,原因是我没有必要去做一个巨大的Quake3场景,弄的SDK下载包大的很。如果你想知道引擎能够支持渲染多少个面,那么你换个场景素材,自己看吧。
8:
我的代码里出了些问题,能帮我解决下吗?我在论坛中没有获得解答。
抱歉,我没有时间为你的应用程序Debug。很多朋友把他们的代码给我让我来解决,但是我没有时间去为每一个来信的朋友解决问题。大部分情况下都是他们自己的C++代码原因而非引擎的错误。请打开你的Debugger用它去寻找你的程序中的错误。如果你不会使用Debugger,那么请在每一行代码前执行一句命令行打印代码,你就会找到是哪一行导致当机了。
而你在论坛中获得不了帮助的大部分原因是你没有详细的描述你的问题情况。仅仅帖了100行代码然后写句“我这里有错,请帮我解决”这样是不行的。嘿,你是个程序员,应该最少60%时间用在程序Debug上。这个是我Debug所花的时间,其他程序员或多或少,但我想都差不多。当你的程序出现错误后,请尽量自己去解决,你将会比问别人找到bug而获益更多。
9
:“Irrlicht”是什么意思?
Irrlicht是德语中的一种会发光,会飞行的神话动物。它通常生活在沼泽旁。我想,正确的英语翻译应该是”will-o-the-wisp”。同样,Irrlicht也可以分割成两个德语单词,“irr”意思是“mad(疯狂的)”,”Licht”意思是”light(灯光)”。Irr引擎发源于奥地利(德国南部),尽管非德语用户可能不知道它的发音,我却认为“Irrlicht”是个好名字。
10:
我能够加入Irr引擎开发团队吗?
基本上不行。抱歉,我喜欢小型的Irr引擎开发团队,因为这样可以保证每个计划简单的得到执行。
但是,这也有例外。如果你对Irr引擎提供了一个 强大/有用/突破性 的增强功能,而且愿意加入团队,我们也会欢迎。例如:你能够使Irr引擎在Mac平台上顺利运行(现在已经可以了,但仅仅是一个Demo可以)。部分朋友提供了Irr引擎一小部分的修改,但是他们没有通过版本控制器来获得引擎的同步,我们也不能让他加入。
不过现在又改了:如果你创建了一个模块并且按照Irr引擎编写规范(下文有),并且愿意长期维护并分享它,你可以加入本小组,你只需要将你的代码发给niko就可以了。
请注意,每月总有4-5个朋友希望加入Irr引擎开发团队,我实在难以选择,因为我们总希望团队尽可能的保持简单而工作快速起来。
11:
代码规范是什么?
如果你制作了一个Irr引擎的补丁,而且希望它加入到引擎中,请遵循以下原则:
除非特别特别特别必要,尽可能的不要依靠其他库
别用STL,请使用Irr引擎中内置的容器类。
别用平台相关函数,必要的话请使用os::命名空间内的函数。
请谨记,Irr引擎是可以运行于其他平台和编译器下的。
请不要使用特殊的编译器扩展,尽量使用标准C++
请使用Irr引擎中的类型定义,例如f32, u32
请尽量不要修改现有的Irr接口。除非极其必要而且正确。另外,建议您应当下载最新版本的Irr引擎。若你依旧有这种修改需要,最好和niko先商谈一下。
尽量使用现有的Irr代码风格。
1:接口以I开头,实现以C开头,仅保存数据的结构体以S开头。
2:函数尽量以小写字母开头,变量尽量以大写字母开头。
3:接口的公共函数,其参数应当给默认值。
4:增加一个函数或修改一个函数,应当按照doxygen规范给予注释。如果你对Irr引擎进行了大量的修改,请在changes.txt中说明。
5:使用C++风格的编码习惯,别使用Java代码习惯,例如
For(foo)
{
//TODO:
}
For(foo){
// TODO:
}
前一种就比后一种好。
6:上面的都是比较重要的规则,但是还有一些其他的小规则。例如,尽量使用命名空间,换行和tab键,使你的代码看起来好看一些。
多检查代码可能出错的地方,预防当机。例如,对一些参数进行判断,检查指针是否为空。另外,发生错误时,输出一个错误log,用其他方式使程序继续运行下去。这些工作除非在软件模拟格式下都是必须做好的。
以上就是基本的代码规范了。
12:
没有CVS吗?
Irrlicht是由一个subVersion服务器做主机的,所有CVS服务器的数据都是老版本的。如果你依然希望获得最新版本的CVS,请通过:pserver:anonymous@cvs.sourceforge.net:/cvsroot/irrlicht ,
13:
我如何链接SubVersion服务器?
14:
下一个版本引擎将有什么功能?
15:
下一个版本Irr引擎什么时候发布?
等它被完成的时候。这个引擎仅仅是一个开源引擎,我从中没有获得一分钱,所以我不能做出最终期限。一般1-2个月我会发布一个新的小版本更动,可能是从0.4到0.5。平时我会提前1-2星期发布公告并贴出一些截屏和新的特征说明。所以请不要再给我来信询问这个问题,实际上,大部分时候我自己也不知道这个问题的答案。
一些文章来自网络,个人允许自由转载,如果原创作者有意见及时通知及时改正。