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