在大規(guī)模的三維場景中,不可能一次渲染所有的三角形,而且即使能做到這點,全部渲染也是不可取的。常用的做法就是采用LOD,即層次細(xì)節(jié)模型。距離視點較遠(yuǎn)的三角形可以大一些,粗糙一些,而距離視點較近的三角形則應(yīng)有較為細(xì)膩地表現(xiàn)。常用的LOD地形的實現(xiàn)算法是四叉樹算法,即對二維地平面進(jìn)行分割時,每次把正方形分成4個等分的小正方形,直到分割的正方形尺寸達(dá)到某個閾值為止,然后對不能再分的正方形進(jìn)行三角形剖分渲染。

由于正方形的右下角位于視截體內(nèi)部(圖1),需要把正方形進(jìn)行分割,圖2為第一次分割的后的狀態(tài)。由于右下角正方形位于視截體內(nèi)部,所以進(jìn)行第二次分割,見圖3。直到第3次分割(圖4),才有小正方形不在視截體內(nèi),既不要細(xì)致渲染的正方形。如此不斷分割,地平面會出現(xiàn)若干大小不等的正方形。為了記錄正方形哪些是要分割的,哪些是不要分割的,需要設(shè)置一個標(biāo)志,為此封裝一個類來管理標(biāo)志,該類記為Bit。
為了判斷一個節(jié)點區(qū)域是否在視截體內(nèi)部,應(yīng)該有一個管理視截體數(shù)據(jù)的類CFrustum。該類應(yīng)該有視截體的六個平面方程,以及檢測物體是否落在視截體內(nèi)的函數(shù)。由于LOD地形是和視點相關(guān)的,距離視點進(jìn)的三角形需要細(xì)膩渲染,而較遠(yuǎn)的則則可以稍微粗糙一些。因此一個正方形距離視點的距離d和自身的邊長e應(yīng)該是一個指標(biāo)來決定改正方形是否需要細(xì)分,d/e < C1時,需要進(jìn)一步細(xì)分,否則不需要進(jìn)一步細(xì)分。當(dāng)C1的值越大,e的值越小,節(jié)點細(xì)節(jié)較為細(xì)致;相反,C1越小,e值越大,節(jié)點細(xì)節(jié)與粗糙。正方形是否需要進(jìn)一步分割,還和地形的起伏有關(guān)系,當(dāng)?shù)貏萜教箷r,節(jié)點細(xì)節(jié)可以較少,反之節(jié)點細(xì)節(jié)應(yīng)該較為豐富。r=MAX(正方形四個定點和中心)-MIN(正方形四個定點和中心)。r/e < C2時,e較大,需要分割。C2越大,e越小,層次越細(xì)膩,反之,C2越小,e越大,可以少一些細(xì)節(jié)。稱C1為距離分辨率, C2為高度分辨率。
既然LOD和視點相關(guān),就必須有一個類來記錄視點,把該類記為Camera,該類應(yīng)該包含視點相關(guān)數(shù)據(jù),如視點位置,視線目標(biāo),視點如何移動,旋轉(zhuǎn)等(未完待續(xù))。