我正在寻找一种优化场景渲染的排序方法(无论网格数量及其大小),最大限度地减少状态变化,并最大化几何收集,以便最少调用glDraw*
个函数。 / p>
在我的提案中,呈现特定批次的最明智选择是函数glMultiDrawElements
,因为它需要一组索引(批处理中包含的每个模型一个)来呈现批处理。此外,它应该是空间分区的完美选择(如果在相机的截头锥体中看不到网格,则布尔标志m_IsVisible
将变为false。在这种情况下,此特定几何体的索引将不会包括在内,因此不会被渲染。)
所以,这是我的主张,我想与受此主题感兴趣的人分享。为了好奇,我花了一些时间在WORD项目中向你展示我的演示:)
这是我在初始化期间对几何体进行排序所需的标准(按照相关性排序)。他们可以收集在一个枚举中:
enum E__SortingCriteria
{
GEOMETRY_CRITERION (geometry storage -> VBOs)
SHADER_PROGRAM_CRITERION
MATERIAL_CRITERION
TEXTURE_CRITERION
};
如您所见,状态发生变化,几何收集似乎已经过优化。但是,我担心某些事情可能不正确或有改进的余地。