基於四叉樹的LOD地形場景的怪異優化探索

2021-08-25 04:12:27 字數 1104 閱讀 3007

基於四叉樹的lod地形場景是開發3d大規模場景地形乙個避不開的話題。小弟對此一直耿耿於懷。雖然說號稱自已學了幾年遊戲程式設計。但實際上真的還不會做四叉樹的lod地形。但眼下要麼就乾掉他,要麼就被他乾掉。

所以,解決這個問題,實屬無奈。。。。。

大概的看了一些資料,西里糊塗的。

不過明確兩點:

1。通過視野遠近調整近地表顯示精度。降低渲染頂點數量。

2。通過將地表平分為四(左上,右上,左下,右下),然後迴圈呼叫判定函式對所處範圍再進行四平分(左上,右上,左下,右下)然後進行拆分判定。通過判定標準的繼續呼叫函式。最後跟據判定結果來進行逐個正方形繪製。

ok,放下書,往開了想。

先不管怎麼lod還是四叉樹。其本質目的是優化場景,也就是減少相對不必要的渲染。提高渲染效率。

其中心思想是強調,近處提高精度,遠處降低精度。高度相差不大的就減少頂點數。

那麼?我要做的。就是把處於乙個面上的頂點盡可能進行刪簡,然後跟據攝像機所在位置周邊範圍n公尺內設為高精顯示即可。

1。 在初始化時先設格仔數量bool陣列 noarray[mterrainwidth*mterrainheight];

全清為0,即代表地表上沒有不用拆分的格仔。然後開始一項計算。

將地表平分為四(左上,右上,左下,右下),在中點,從左上到右下,計算每個面的法向量,看是否相同。如果相同,將中點所在位置的noarray元素值設為true。即此範圍鐵定不用拆分。

如果發現有不同,返回,對所處範圍進行四平分(左上,右上,左下,右下)繼續迴圈呼叫此函式。看四個平分面是否符合。

再設格仔陣列bool陣列yesarray[mterrainwidth*mterrainheight];

2。在渲染前,設yesarray都為true,代表進行拆分。

將地表平分為四(左上,右上,左下,右下),看中點的noarray元素值是否為true,如果true,yesarray對應元素改為false並返回即可,如果false,對所處範圍進行視野判定。看是否符合距離標準,並設定對應的yesarray元素值。四平分(左上,右上,左下,右下)繼續迴圈呼叫此函式,

3。渲染時 將地表平分為四(左上,右上,左下,右下),看中點的yesarray來進行判定是否渲染此正方形。並四平分(左上,右上,左下,右下)繼續迴圈呼叫此函式

基於四叉樹的LOD地形場景的怪異優化探索

基於四叉樹的lod地形場景是開發3d大規模場景地形乙個避不開的話題。小弟對此一直耿耿於懷。雖然說號稱自已學了幾年遊戲程式設計。但實際上真的還不會做四叉樹的lod地形。但眼下要麼就乾掉他,要麼就被他乾掉。所以,解決這個問題,實屬無奈。大概的看了一些資料,西里糊塗的。不過明確兩點 1。通過視野遠近調整近...

實時繪製基於LOD的地形相關技術

lod levels of etails細節層次 是解決大規模地形實時渲染的一項關鍵技術。在地形中實現lod技術後大大加速了地形的渲染。其基本思想是 對地形生成具有不同層次 不同解析度 的多個版本,在繪製地形時依據視點來選擇合適的層次細節進行繪製。本文用基於四叉樹構建的地形來實現相關lod演算法,有...

四元數,四叉樹的理解

四元數是複數向三維的擴充擴充套件,使用複數乘法來實現旋轉。具體參考如下 understanding quaternions understanding quaternions 中文翻譯 其實就是將二維空間使用矩形大小來表示,每個結點分為0 leftup,1 leftdown,2 rightup,3 ...