參考了下OGRE的靜態(tài)模型策略,分析出兩種:
第一種就是我們常見的n個(gè)靜態(tài)模型使用n個(gè)VB渲染n次,這種方法適用于變換矩陣總是要變化的靜態(tài)模型繪制,比如說月球圍繞地球。
第二種有點(diǎn)類似于LineBatcher的概念,靜態(tài)模型管理器將所有在編的靜態(tài)模型,按照材質(zhì)分組,每個(gè)材質(zhì)1個(gè)VB大緩沖,然后將所有的Mesh頂點(diǎn)乘上其變換矩陣變換為世界坐標(biāo)系后塞入VB,繪制1次。這種方法在同材質(zhì),大量靜態(tài)物體時(shí)很高效,可以說是用空間換時(shí)間,具體應(yīng)用如:草原上的一片一片的草。 重建的時(shí)機(jī)為:有模型創(chuàng)建,銷毀,或者矩陣,材質(zhì)有變化時(shí)。
OGRE中利用了Entity和SceneNode來給模型管理器提供一個(gè)遍歷整理數(shù)據(jù)的流程。默認(rèn)的,都是使用第一種方法渲染。
原本最簡單的靜態(tài)模型渲染,在追求效率的要求下,變得比骨骼動(dòng)畫都還復(fù)雜。