我们在 使用 Horde3D 写一个 Demo时,
真正的只需要与Horde3D的 以下几个类打交道就行了:
1 SceneManager类,2 ResourceManager类
通过 它们提供的接口 来添加资源类 和 节点
每添加一次, 都会创建一个 这个类的引用
3 Resource类
不同的Resource都继承该类
这些Resource的子类通过 factoryFunc初始化,并 保存了 资源xml文件的路径
在H3DUtils类里,有一个方法, 根据这些路径,解析出 该Resource类的所有属性(xml里定义好的)。
Resource 子类对象 会依附在 SceneNode 上,或者 直接 showOverlay这样的方法 画出来
4 SceneNode类
所有的 SceneNode子类都继承自 SceneNode类
每次添加这些类时, SceneNode子类 都会挂在 RootNode这么一个 根节点下。在add的时候, 会根据其依附的Resource 子类,对 SceneNode进行初始化
SceneNode的 初始化 都需要经过 SceneNodeTpl的这么一个结构体。 之所以需要 一个 Tpl来初始化,是因为 SceneNode的子类 都是 私有构造。Horde3D采用工厂模式来构造它们
5 Renderer类
MainLoop里 会根据依附在Camera节点类的 Pipeline 资源 来 得到
渲染的步骤:
所以 Renderer类的 render方法 需要 接受一个Camera节点
Horde3D 真正做到了 创建的场景画面 与 程序分离
我们使用的 材质, shader特效, 场景物体,甚至渲染 流程 都是写在xml里的。
渲染时, 会根据 你在xml里的渲染步骤,来 进行 ,
1 更新场景物体位置
2 使用shader program
3 bind VBO IBO
4 bind off/on screen buffer
5 draw
这些常见的 渲染命令深度
Renderer类 其实 封装了 一个 更底层的渲染类 RenderDevice, 在这个类 里
完成了 创建shader, 创建 VBO, IBO FrameBuffer等工作 其 createPrimitives 创建了基本的几何形状等等
——————————————————————————————————————————————
如果你对3D渲染/技术有浓厚的兴趣,同时又是具备了极客、开源精神的从业人员
欢迎加入群: 445038170
希望我们能一起做点什么