<iframe align="center" marginwidth="0" marginheight="0" src="http://www.zealware.com/csdnblog336280.html" frameborder="0" width="336" scrolling="no" height="280"></iframe>
OGRE3D 引擎一向与时俱进,依靠强大开源社区的支撑,总是能很快地把比较新的图形引擎技术加入其中。几年下来,它成了一个试验最新图形技术的平台。1。2支持了d3d的MTR(multi render target)--- deferred shading. 双面STENCIL BUFFER---更快的shadow volume(en...没看到depth clipping), instance(绘制草),各种post processing 技术. FX,CG,HLSL,GLSL支持,场景管理有OCTREE,BSP,TERRAIN(QUADTREE),一整套UI(CEGUI)。 基本上,作为一个图形程序员,这几年想弄的东西,它里面基本都包含了。虽然不是每项都精,但现在这种大而全的规模,另外感叹. 只要SHADERX系列,GPU GEMS系列,GPG系列,NVIDIA,ATI,图形一出了东西,估计都可以快速在OGRE里看到。一个图形引擎入门决好的教材。
上次看是1.0以前的版本。这个工程主要就是体现其名字---面向对象的图形引擎。所以各个部件都是从OO出发,最大可能体现OO在设计图形引擎中的作用。当然,也导致真实际用在工程里,不可避免的繁琐。真正的游戏工程其实不需要那么多变化的封装。另外,那可笑的从std::string派生的String类终于消失了。 但是1。2里突然发现又加了一个shared_ptr。而且是自己实现的,用于引用记数,与智能指针。。。。前一段为了让BOUNDCHECKER与STLPORT兼容,刨到STLPORT的string里面,发现内存池和replace new结合一用,基本让boundchecker的内存泄漏检查废柴。在STRING_OPTIMAZATION选项打开时(缺省),一旦需要string,STLPORT会先生成一个960的BUF,用来给replacement new用。可以想见,当用容器管理shared_ptr,在那shared_ptr曲折且隐讳的创建与销亡过程中,不知道会有多少废弃的对象沉尸于各种实现的stl memory pool中。一旦当外部iterator也好,什么也好,用错了一把,stl mem pool中的尸体就会被重新打捞上来被赋予僵尸复活的使命。而这一切还魂的过程将被shared_ptr,auto_ptr,non_ptr之类的东西掩盖得无影无踪。
几年里,给人印象深刻,几个月未找出,为数不多的几个BUG,都是因为对象生存周期使用容器管理而导致。。。。而错误其实都很低级。。。只不过淹没在STL内部那些晦涩拗口的优化实现里,无法及时发现。而这些错误又被STL自己的内存管理误打误撞的吃掉。导致重复一个错误花几个小时,甚至几天。尤其服务器,碰到STL里面自己throw然后悄无声息退掉程序,连COREDUMP都抓不到。错误就是一位弟兄越界访问了一个list.
作为软件工程,培训,学习,检测,走查,但什么也抵挡不住参差不齐的技术能力造成的破坏。当有些程序员把书写GP程序当成保护自己利益的手段时(因为其他人看不懂那些拗口的模板方法),或者卖弄聪明自鸣得意的乐趣时,那些初衷为更好解决复杂问题的手段,已经早已背离了方向。成为自己设计当初缺陷的牺牲品。只有STLPORT提供的容器越界检查(或者个人行为的SAFESTL),千篇一律晦涩不堪的STL代码风格,艰难的调试过程。工程中,一个人做到使用简单容器不出错误。根本没用。天才的人会指责为什么大家不都和他一样的智商。或者具有一样的经验与能力。但我怀疑,在VC的STL里提供一个assert( IS_VALID(iterator)) ,很困难么。毕竟STLPORT也时一个干的。这些都不是理所应当的。这就是STL的缺陷。我确实更关心软件工程,而不在乎软件科学如何的优雅。软件只是工具,目的就是要完成产品。在工程实践上,STL就是有它不少弊端。可以理解成这是对功能+性能追求的代价。
其实关键还在使用的态度。面对高级技术和工具,凡人很容易丧失了稳定心态。在能够勉强驾驭之前,就早已自鸣得意起来。但对于底层复杂丑陋,外表优雅方便的STL,或者其他永远诱人的各种高级技术,我们使用者永远得小心翼翼,心怀谦卑。那些发明这些东西的大师聪明程度不是我们能比的,他们也不需要在短短几年靠真刀真枪干出产品成家立业。对他们来说探索和发明的时间单位是年。而我们实践的单位是小时。对显而易见的荒谬视而不见,只被前瞻的华丽外皮麻醉是最可怕的。谁都在用std::vector,可几个人可以背诵出不同STL背后实现的优化内存池在外部对象生存管理错误时导致的精确后果?STL帮你实现的太多,也掩盖了太多。我用最丑陋的方法,达到目的,也比用最光鲜的技术导致5个人熬3个通宵解决2个月不出现BUG要强58倍。 理想的世界,学习曲线是忽略不计的,培训成本也是忽略的,员工成长的企业付出代价也是不计的。。。。。所以,这么不理想的BUG根本就不该出现。
其实还是,这么不理想的态度不要出现为好。
分享到:
相关推荐
OGRE 3D Ogre加载自己的资源包
OGRE 3D game developing tutorial and sourecode
Ogre基础教程,为Ogre初学者提供入门指导,方便大家学习。
资源名称:OGRE 3D从新手到入门内容简介:0_序言1_OGRE3D介绍2_配置开发环境3_OGRE基本框架介绍4_OGRE场景管理器器介绍5_OGRE初级教程目录5.1_OGRE初级教程15.2_OGRE初级教程25.3_OGRE初级教程35.4_OGRE初级教程45.5...
OGRE编程开发
This is a brief, but detailed guide to use the OGRE SDK and the OGRE SDK AppWizard. Remember: You don't need anything but Visual C++, the OGRE SDK and the AppWizard. And you don't need to configure ...
本资料是ogre的简单教程,是初学者的指导文献。介绍安装OGRE所需要的操作,这篇文献的好处是提供了一定的源码,可以参考源码编写第一个程序。
Ogre VC9 AppWizard 1.7.0_4 OGRE工程创建向导,使用向导可以省去很多麻烦。对初学者很有用。
Ogre_VC10_AppWizard_Ogre_VC1Ogre_VC10_AppWizard_1.7.30_AppWizard_1.7.31.7.3
Ogre_VC9_AppWizard_1.8.0.
Pro OGRE 3D Programming 中文翻譯版本0.2.0(繁體版)
每次想要编写Ogre程序时,如果新建了工程,都需要和这步一样配置,很麻烦。如果仅使用Ogre进行开发,建议安装Ogre Wizard。安装以后新建工程时会直接出现Ogre应用程序,选择它即可,就不用这样配置了。
OGRE 3D实现的一个RTT 通用性强,代码风格规范,用到设计模式
OGRE_3D_1.7_Beginner's_Guide_第八章.doc OGRE_3D_1.7_Beginner's_Guide_第八章.doc OGRE_3D_1.7_Beginner's_Guide_第八章.doc
OGRE中文解决例子 环境 :VC 8.0 ,OGRE SDK.
Ogre 和 cegui 的结合使用示例。它只包括最基本的加载过程,和事件响应
帮助读者熟悉OGRE3D演示程序所使用的框架,并完成一款《打地鼠》游戏,采用Orz框架来代替OGRE3D演示程序框架实现《太空侵略者》这款经典游戏,以及Orz框架的使用细节。每一个课程都有相关的代码提供给读者参考,读者...
打包下载,资料包括(非常适合想分析ogre结构的朋友): Ogre基础教程 ...基于OGRE和ODE的驾驶模拟系统的设计与实现.caj 基于多核平台优化的OGRE 3D渲染引擎.pdf Apress.Pro.OGRE.3D.Programming.pdf
OGRE依赖文件OgreDependencies_MSVC_20100501 必备的文件