OGRE介绍
Ogre(Object-orientedRendering Engine ),是一个面向对象的图形引擎。
产品特点
- 完全面向对象. 对GL和DX进行封装.
- 可扩展的框架 【插件系统】:
- 需要的功能以插件的形式添加进系统扩展系统 实现横向扩展
- 渲染状态管理 / 空间剔除 / 透明度的处理 等由系统自动解决
- 干净整洁的设计和完整的文档
平台和API
- D3D9 D3D11 OpenGL( ES2,ES3…)
- 跨平台(Windows/Android/MAC…)
Material和Shader
- 支持顶点着色器和片元着色器
- multitexture and multipass blending, texture coordinate generation and modification 多纹理和多遍混合,纹理坐标生成和修改
- Multiple pass effects, with pass iteration if required for the closest n lights 多Pass特效和Pass迭代(如果需要n盏灯光)
- Support for multiple material techniques 支持多材质技术
- Material LOD support 材质LOD支持
- 多种纹理格式支持. 纹理压缩?
- Textures can be provided and updated in realtime by plugins, for example a video feed 纹理可以实时通过插件更新.
- projective texturing支持
Animation
- 复杂的骨骼动画 skeletal animation
- 通过可变的权重. 融合多个动画
- 可变/多 骨骼权重蒙皮
- 智能缓冲区共享 intelligent buffer sharing 软硬件加速蒙皮管线
- 手动骨骼控制?
- 可配置的插值模式. 精确 vs 速度 tradeoff
- 灵活的 Shape animation 形状动画?
- Morph animation 形变动画
- Pose animation for modern shape animation, allowing you to blend many poses at variable weights along a timeline, for example expression / mouth shapes to perform facial animation Pose动画和时间线融合
- 所有的技术可在硬件和软件实现
- 用于摄像机路径和类似技术的SceneNodes动画,需要时使用样条插值
Scene Features
- 场景管理: 灵活. 可高度定制
- 很多例子: BSP, Octree等
- 分层场景图; 节点允许对象彼此连接并彼此跟随运动,关节结构等
- 多种阴影渲染技术. 基于模板和纹理的调制技术和加性技术,每个都是高度可配置的,并充分利用了可用的任何硬件加速功能
- 场景查询特性
Special Effects
- Compositor系统. 全屏后处理等特效
- 粒子系统. 粒子池!
- Skyboxes / skyplanes / skydomes 天空盒 天空穹顶
- 公告板 for Sprite 精灵
- Ribbon trails ??
- 半透明物体自动管理 (渲染顺序/深度缓冲设置)
OGRE的设计理念与特色
面向对象
Ogre的设计是完全面向对象的。
“设计模式”思想
Ogre中使用设计模式来提高程序库的可用性。
Ogre的设计中成功的实现了多种通用的设计模式,大大增强了Ogre的运行效率与灵活性。
举例来说:Ogre中使用了多种模式。
包括:
- 观察者模式、
- 单件模式、
- 迭代器模式、
- 访问者模式
- 外观模式
- 工厂模式
实现了场景节点与场景内容相分离
在Ogre中,场景节点 和 场景中的内容 是两个完全分离的概念。
Ogre中引入了 实体Entity 的概念,实体是场景中可以被渲染的物体。
实体不能直接被放置到场景中,它需要与场景节点绑定后放入场景。
灵活丰富的插件体系
Ogre安装目录下的plugins.cfg配置文件掌控了整个插件体系
灵活多变的渲染队列
渲染队列在Ogre中是一个重要的设计,它在对场景中不同物体的处理方面发挥了重要作用。
在场景中的所有需要渲染的物体在绘制之前都被放到一个特定的渲染队列中,队列也按自己的顺序排好,然后Ogre分别渲染每个队列。
Ogre中的渲染队列主要起到两个作用:
1.确保正确的绘制顺序,比如先绘制背景再绘制其他物体(如图4-4所示);
2.提高渲染效率。
Ogre是按照从底到高的顺序来渲染每个队列的.
同一个队列中的不同场景是按照从左到右的顺序来进行渲染的。
使用材质脚本,让Ogre更加灵活、健壮
独有的材质、模型和骨骼文件
Ogre拥有自己独立的模型和骨骼数据格式,它不能直接使用其他的模型格式。
-
材质(Material)
.material
-
模型(Mesh)
.mesh
-
骨骼(Skeleton)
.skeleton
支持多种类型动画
Ogre支持三种动画方式:骨骼动画、变形动画以及姿态动画。
合成器后处理技术(Compositor Postprocessing)
实现后加工处理效果。
Ogre中,还有一个合成器脚本的概念。
合成器脚本可以看做是一个由若干合成器组成的合成器链,读者可以想成将这些合成器首尾相连形成一个合成器链,例如合成器脚本A→B→C→D→E,当我们利用这个脚本实现某种3D特效的时候,分别经由A、B、C、D、E这五个合成器,然后将各自的效果叠加形成最终的效果,其中,各个合成器之间是通过“纹理传送”的方式进行通信的。
另外,合成器脚本可以调用材质脚本。而且,跟材质脚本类似,合成器脚本也可以直接从代码中直接创建。
可扩展的资源管理
资源有四种状态:原始状态,声明状态,初始化状态未载入和载入状态。
这四种状态组成了一个资源的生存周期。
在Ogre中每种资源都有自己的资源管理器,每个管理器都负责资源的加载与卸载,并管理着资源所占用的内存,控制着每一个资源实例的生存周期。