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

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