我们自己在写Opengl 渲染程序时, 会定义好每个可渲染的物体对象,它的属性可以包含了 顶点,颜色,材质, shader program。 然后,对它定义接口包括更新顶点位置,得到变换矩阵,使用shader program, 输送unifrorm变量,通过VBO,IBO draw。
这样子我们 会创建一堆的 可渲染对象, 然后对每个对象进行渲染, 随着对象的增多,代码量就会变得越多
代码量的增多,主要在于 每一次我们渲染对象,都要调用一次对象的 bind VBO方法,use shader program方法, draw方法。
这些方法的复用率很高
如果 按照这些方法归类,即按照渲染流程中常出现的方法进行归类。那么,就可以做到,只需要有限的代码量,就可以渲染出无限的对象。
Horde3D是这么做的。场景中的节点 即我们的可渲染对象, 都添加到 _spartialGraph的集合里。 在渲染时,会挨个取出,进行渲染。
Horde3D 将 可渲染对象的属性(顶点属性数据,材质信息,Animation)都写在xml里,将渲染的流程(shader工程,送入uniform变量,bind FrameBuffer, bind VBO, draw)的具体命令,也写在了xml里。它们就像血液一样,是属性也是养分,充满能量
Horde3D renderer类, 则定义了渲染中每个命令该怎么做,如何 bind 各种buffer,如何draw,去哪里取出属性。Renderer类就像是 骨骼脉络。
血液顺着骨骼脉络铺好的路,流淌,属性赋值与各种变量供方法使用。最终使得整个Horde3D引擎焕发出光彩。
——————————————————————————————————————————————
如果你对3D渲染/技术有浓厚的兴趣,同时又是具备了极客、开源精神的从业人员
欢迎加入群: 445038170
希望我们能一起做点什么