层次结构树 场景中比较典型的层次结构:
1。一个巨大的无限延伸的地面向远方延伸(层层叠叠的山岚、一望无际的大海、汗如穹庐的天空、不时出现的飞鸟走兽等等)
2。一个很帅的英雄背着一把大刀站在缓缓向前的船头很装逼的凝视着远方,可能身上还加了个buff
3。这个英雄觉得可能有点冷,就在甲板上来来回回的跑或者干脆跳过来跳过去
4。英雄突然觉得这船好像有点慢,然后就从后舱唤出一只大鸟,骑到背上腾空而起
这里涉及到的是场景管理中所谓的层次结构关系树,把场景中所有的对象都抽象成节点,然后按父子关系组成如下的结构: 节点挂接到父节点上之后,可指定其跟随父节点矩阵变化的方式:
1。跟随旋转和平移
2。只跟随旋转
3。只跟随平移
每次节点坐标系发生变化时要遍历以其自身作为根节点的子树上的所有节点,按照跟随方式更新其坐标系。 如果在是可以运动的节点(比如主角、载具),指定其运动坐标系是否相对于父节点,则可实现:英雄在移动的船上跑来跑去 这类具有多重相对运动的关系。 将摄像机也作为场景节点添加到不同的节点上,可以很方便的继承节点坐标系,获取不同的观察视角。
————分割线—————–
裁剪树 就是裁剪树了
————分割线—————–
渲染状态树 这个要不要组织成树结构,现在还不确定。按我的想法,将最耗时的渲染状态项放在最顶端,按照其取值分出n个分支,再接上次耗时的渲染状态项,由此组织成一个树,树的根节点上放上要渲染的节点,渲染时按照顺序遍历的方法,即可实现最少切换渲染状态,但是跟大牛聊了聊,觉得这种组织方式本身会比较耗时(整个渲染状态树最坏情况下回比较庞大),不过试了才能知道。 树的每条边表示一个状态值,沿着根节点从顶到底一次遍历就构成了一个完整的渲染状态,但从图上可以发现这种构造方法实际上状态冗余相当厉害。
实际实现上:我想直接将每个完整的渲染状态看做一个多维向量,对多维向量进行排序时可以从耗时最多到最少的依次指定排序key,并对那些相对不那么重要的key以后的状态不做排序,既可以达到比较理想的材质排序效果。