渲染队列保存了所以这一次必须要渲染的物体的信息。它的构成比较的复杂,渲染队列被分成了好 多个组(group),这些group都和一个id对于,越小GroupId的group就越先渲染。而每个group又被分成了很多个 PriorityGroup,每一个PriorityGroup同样对于一个id,同样是越小的id就越先渲染。而PriorityGroup就是比较基本的渲染单元了。经过两次划分以后为于同一个PriorityGroup的renderable再次分组,这是因为透明物要进行特殊的处理,需要作透明处 理的renderable进入一个vector,不要作透明处理的renderable按照它的Material进行分类,有着相同的Material的 renderable进行同一个vector。到了最后渲染的时候,按照id遍历每个group,对于每个group,按照id遍历 PriorityGroup,对于每个PriorityGroup,首先执行不透明物体的处理,然后把透明物体按照相对摄像机的远近进行排序,依次渲染每 一个renderable,然后重复下一个PriorityGroup,然后是group。
for 每一个group
{
for 每一个 PriorityGroup
{
// 不透明部分
for 对于每一种Material
{
SetMaterial() // 包括了texture等等的属性
for 所有这种Material的Renderable
{
渲染这个renderable
}
}
// 透明部分
sort()
for 每一个renderable
{
SetMaterial()
渲染这个renderable
}
}
}