LOD四叉樹一些筆記

概要:

  這是對網上一個LOD四叉樹例子的閱讀筆記

例子源碼:http://download.csdn.net/download/yyyyy_ddddd_0531/3903332

主要的地形渲染主要設計:

    LOD 設計,通過以一個Bits 數組來標記Row*Col大小的地形,Row,Col取決於地形的大小,爲了節省內存空間,用一個位來代表一個網格,故Bits的大小爲 Col * ( Row/8+1,只有通過篩選條件判斷的頂點置入Bits的值爲1,即bits值爲1的值才進入渲染;

篩選條件:


1 渲染過程中啓動平截頭體篩選,只有在平截頭體內的網格頂點在才設爲TRUE,並進行下一輪細分


2 當具體距離大於2000時,他與高程坡度誤差和層級的乘積比大於某個比例常數時,它才進行細分(坡度越高,才越有機會細分


3 當距離小於2000,無視距離大小,只有坡度大於30時該頂點才需要細分


4 網格間的距離大於 MIN_GRID = 32,才需要細分



渲染過程:

1 通過三角扇來渲染三角面片,通過對應的網格中心頂點和網格間距,每次繪製4個三角面片

 

2 通過Bits 數組的值是否爲ture來確定渲染的LOD級別,達到數據的優化

 

渲染過程中的技巧

    T形裂縫的修改

    T形裂縫說到底就不同LOD層次時三角形中頂點的高度值差所造成的,不同LOD層次獲取某一個點的高度值取決於相鄰(相鄰距離取決於網格的大小)頂點的平均值,極端情況下是數據的最原始的精度,知道原因,就能夠解決問題,即如何保持不同LOD接口處頂點的高程值保持一致,傳統的做法是,高層次的LOD面片減少指向接口處頂點的線段即不繪製較高精度的頂點,稱爲邊刪除技術,或者增加LOD層次接口處的頂點線段即繪製高精度頂點稱爲邊插入技術,毋庸置疑,這兩種技術都有這樣的約束條件:

     相鄰兩個LOD節點之間的層次不能大於2


例子採用邊插入的技術實現T裂縫的修補,用遞歸來消除LOD小於2的前提,主要要修復每個節點上,下, 左,右4個點多,如果子節點間也存在着LOD差,需遞歸遍歷

代碼:

//修補網格頂部裂縫的函數
//參數:
//	nXCenter: 網格中心點坐的X值
//	nZCenter: 網格中心點坐的Y值
//	nSize:網格大小   
void CTerrain::RemedyTop(int nXCenter,int nZCenter,int nSize)
{
	if(nZCenter-2*nSize>=0)//保證尋址不越界
	{
		if(!m_cFlag.IsTrue(nXCenter,nZCenter-2*nSize))//此網格相鄰的頂部網格(同級的)沒有細分
			return;
	}
	else
		return;
	//此網格相鄰的頂部網格(同級的)已經細分
	//對頂部一分爲二遞歸(跨級精度的情況)
	//左子節點上頂點遍歷
	RemedyTop(nXCenter-nSize/2,nZCenter-nSize/2,nSize/2);
	SetTextureCoord(nXCenter,nZCenter-nSize); 
	glVertex3i(nXCenter,Height(nXCenter,nZCenter-nSize),nZCenter-nSize);
	//右子節點上頂點遍歷
	RemedyTop(nXCenter+nSize/2,nZCenter-nSize/2,nSize/2);
}

其他類似

效果:



總結:

   優點:

         通過一個位來表示一個頂點,並存儲場景中所要渲染的數據,這種結果比較清晰,能夠很好的查看,調用場景中的數據。

   採用LOD來優化數據加載,除了考慮距離來約束LOD層次外,也利用了坡度來約束覺得場景的細節層次LOD,很好的逼近現實

 

   缺點:

  



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章