青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

芳草春暉

偶爾記錄自己思緒的地方...

 

四叉樹和八叉樹的剔出選擇(轉)

英文原文出處:http://www.gamedev.net/reference/articles/article1485.asp
翻譯:宋曉宇

介紹:
  傳統計算機圖形應用--特別是的應用的需要一個實時,交互的方法來現實--通過處理一個發送到顯卡的數據的最有效的圖形數據子集的方法來決定圖形數據的顯示,而不是傳送全部的數據,四叉樹,八叉樹,Bsp樹,背面剔出,pvs集合很多其他方法都是針對這個目的而提出的。

  流行的計算機圖形卡近些年在處理能力和處理方法上程指數增長,當前的狀態揭示出很多時候應該更好的和快速的找到一個好的數據集把它們送到顯卡里,而不是把精力放在努力的找到一個最好的數據集。這樣的數據集是一個近似的最好的數據集并且能經常發現它都有十分有效的算法,因此手頭上的任務因此就變成了回顧已經存在的技術和算法并且嘗試找到最快的選擇,這對于找到最好的解決問題的方法并不是什么負擔。

一、四叉樹:
  四叉樹作為數據處理表達技術的一個好方法已經有很多年了,特別是地形渲染引擎都能利用他很有效的作為剔出機制,剩余的這個章節將會給出一個小數量的說明四叉樹并且傳統的,高層的方法使用四叉樹,在描述一個快速的方法之前。

http://school.ogdev.net/upload/img/4885992475.jpg


四叉樹數據結構:
四叉樹被描述通過對應每個父節點傳遞四個子節點,在一個地形渲染上下文里,根節點將會表達為這個圍繞地形的正方形區域集,自節點表示為“左上”,“右上”,“左下”和“右下”象限,這些象限由根節點組成并且每一個都是由四個字節點遞歸的定義下面的描述將會說明這些概念一個四元數的數據結構并不負責,下面的偽碼演示了這個四叉樹的節點:
TPosition = record
x,y : float;
end;

PQuad = pointer to TQuadNode;
TQuad = record
p1,p2,p3,p4 : TPosition; // corners
c1,c2,c3,c4 : PQuadNode; // children
end;

一個簡單的遞歸初始化一個深度為max_depth的四叉樹如下:
function InitQuad(x,y,w : float; lev : int) : PQuad;
var
tmp : PQuad;
begin
inc(lev);
if lev > max_depth then return(nil);
new(tmp);
...initialize tmp node with corner data
w := w / 2;
tmp^.c1 := InitQuad(x - w, y - w, w, lev);
tmp^.c2 := InitQuad(x - w, y + w, w, lev);
tmp^.c3 := InitQuad(x + w, y + w, w, lev);
tmp^.c4 := InitQuad(x + w, y - w, w, lev);

return(tmp);
end;

基于四叉樹的背面剔除

  在很多應用里主要的四叉樹函數是提供一個有效的的視截體數據剔除,下面的基于視點的高層視截體剔除已經夠了:
procedure CullQuad(q : PQuad);
begin
case Clip_Quad_against_View(q) of
inside : DrawQuad(q);
outside : ; // ignore quad
else begin
...CullQuad children of q
end;
end;
end;

Clip_Quad_against_View 是cullquad的關鍵函數,并且當然運行的函數和方法來解決這個問題是否是一個四元(或者多邊形)交叉于這個視見體,通過交叉視見體金字塔作為平面集合檢測平面作為一套光線,然后連續測試幾何體的光線怎么和可視體平面相交的,光線相交測試的方程在很多3d幾何的書上都可以找到,這里不做重復。

二、選擇基于四叉樹的視點剔除:

上面描述的方法一般情況下會得出正確的結果,但是他沒有給這個簡單的靜態的四叉樹提供任何東西,好多的優化可以應用到四叉樹的剔除過程,下面的兩個階段產生了一個很快的和很有效的基于四元數的剔除:

  *基于點的剔除:一個完全的剔除計算,他通過記錄相關的四個角的可視點。

  很多這樣的情況可以被考慮,例如:如果一個單獨的點在視見體內發現,那么這個塊就在視見體內,如果所有的點都在視見體的一面,那么這個塊就不在視見體內.一個數量的可能性就存在,并且需要通過一個完全的計算,但是上面給出的兩種情況得出了一個充足的啟發性來接受,丟棄或者將來重新定義一個潛在的塊。

  *Momoization:是一種儲存計算結果的技術并且還需要相同的計算時查找儲存的結果。

  四元數作為一個靜態結構,這種特殊角的點經常都是相同的,另外,很多塊的角是四個塊共享的,并且在循環傳遞四元數的角一遍又一遍的,通過決定一個角的相關位置關聯這個可視體和方便的儲存這個四元數的的計算結果。

  下面的偽代碼聲明了這個算法,對于一個四元數橫跨的區域是(0,0)到(256,256);
(globals:)
Memoized : array[0..256,0..256] of byte;
posx,posy : float; // origin of FOW
Lx,Ly,Lz : float; // normal of left FOV plane
Rx,Ry,Rz : float; // normal of right FOV plane

function CheckPos(x, y : int) : int;
// checks position x,y against FOV planes, memoize
// Results: bit 1 (inside), bit 2 (left), bit 3 (right)
var
res : int;
begin
res := 0;
if (x-posx)*Lx + (y-posy)*Ly > 0 then res := 2;
if (x-posx)*Rx + (y-posy)*Ry > 0 then res := res or 4;
if res = 0 then res := 1;
Memoized[x,y] := res;
return res;
end;

function TestQuad(x, y, w : int) : int;
// quad-midpoint: (x,y)
// quad-width: 2w
// test quad against FOV
// Results: 0 (out), 1 (partially in), 2 (completely in), -1 (unknown)
var
m1,m2,m3,m4 : int;
tmp : int;
begin
m1 := Memoized[x - w, y + w];
if m1 = 0 then CheckPos(x - w, y + w);
m2 := Memoized[x + w, y + w];
if m2 = 0 then CheckPos(x + w, y + w);
m3 := Memoized[x + w, y - w];
if m3 = 0 then CheckPos(x + w, y - w);
m4 := Memoized[x - w, y - w];
if m4 = 0 then CheckPos(x - w, y - w);

tmp := m1 and m2 and m3 and m4;
if tmp = 1 then
return 2; // quad completely inside FOV

if m1 or m2 or m3 or m4 = 1 then
return 1; // quad partially inside FOV

if tmp => 0 then
return 0; // quad completely outside FOV

return -1; // else quad state undetermined
end;

上面的函數應該被清除并且及早的需要整數的的四元塊程序
procedure CullQuadtree;
begin
Clear_Memoized_Array_to_Zero;
CullQuad(Quadtree_Root);
end;

procedure CullQuad(q : PQuad);
begin
case Test(quadmidpoints and half-width) of
2 : ...handle complete quad
1 : ...handle partial quad
0 : ; // ignore quad
else begin
...CullQuad children of q
end;
end;
end;

三、另外需要考慮的:

很多在代碼里和一般的算法里都需要被考慮的是:

  *四叉樹算法的版本里表現出的只剔除左/右,不是近裁剪面,不是遠裁減面或者上下都沒有考慮,另外只有平面視角。因此這個算法只覆蓋了四叉樹的的高度剔除和視見面沿著這個四叉樹的面。

  我們擴展這些代碼沿著3d的四叉樹,增加如:應用四叉樹的移出算法-任何可視的位置和方向將會正確的進行的東西。

  *另外很多附加的點,視見體需要考慮執行的比如:如果兩個點在視見體的前面并且對這FOV的一個面,這個塊部分在這個視見體里,對于很多的算法,這樣的關卡滿足這個結果。

  *主要關心這個算法的需要是在記憶需求里,盡管一般的沉浸記憶對于每個可能的塊某些點需要一個附加的字節。因此如果正方形的區域有n個間隔,每個面都都需要n個字節來儲存,通過典型的只有一個碎片的內存被一個給定的遍歷訪問,這一部分就被訪問了很多次。

  這篇文章總結了算法的表達,我發現這是一個有用積極的算法,如果你查詢了相關的算法并且有感觸可以寫信給我咨詢。

posted on 2010-05-18 17:23 CrazyDev 閱讀(530) 評論(0)  編輯 收藏 引用 所屬分類: 游戲引擎

導航

統計

常用鏈接

留言簿(1)

隨筆檔案

文章分類

文章檔案

C/C++

CEGUI

Friend Bog

Game Industry

Lua

OGRE

Other

搜索

最新評論

閱讀排行榜

評論排行榜

青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            日韩天堂av| 久久久免费观看视频| 欧美性理论片在线观看片免费| 亚洲国产成人porn| 亚洲国产成人久久| 欧美精品日韩精品| 亚洲在线国产日韩欧美| 亚洲一区二区三区四区五区黄| 国产精品日日摸夜夜摸av| 香蕉视频成人在线观看| 久久国产免费看| 亚洲黄色av| 夜夜嗨av一区二区三区免费区| 国产精品男gay被猛男狂揉视频| 欧美一区二区福利在线| 久久综合色播五月| 日韩网站免费观看| 亚洲欧美日韩精品久久久| 韩国成人福利片在线播放| 欧美激情欧美激情在线五月| 欧美日韩精品综合在线| 欧美一区网站| 欧美国产日韩一区二区三区| 午夜日韩在线| 模特精品在线| 欧美一级久久久| 久久久人人人| 亚洲午夜三级在线| 久久久久久综合| 在线亚洲欧美| 狂野欧美激情性xxxx| 亚洲综合日本| 欧美sm极限捆绑bd| 欧美一区网站| 欧美三级视频| 裸体一区二区| 国产精品丝袜久久久久久app| 欧美精品一区二区三区很污很色的 | 欧美专区在线播放| 99国产麻豆精品| 久久激情综合| 小黄鸭精品aⅴ导航网站入口| 农夫在线精品视频免费观看| 久久精品国产免费观看| 欧美日韩在线观看视频| 欧美成人精品一区二区三区| 国产欧美一区二区三区另类精品| 亚洲精品日本| 亚洲国产精品成人综合色在线婷婷 | 亚洲视频第一页| 六月丁香综合| 免费不卡视频| 国内精品一区二区三区| 亚洲欧美日韩另类| 亚洲中午字幕| 欧美日韩亚洲一区二区| 亚洲国产婷婷综合在线精品 | 亚洲国产综合在线| 国产中文一区二区| 亚洲综合第一页| 亚洲欧美电影在线观看| 欧美日韩伦理在线免费| 欧美韩国日本综合| 亚洲国产另类久久精品| 久久精品国产一区二区三区免费看| 亚洲欧美另类在线| 国产精品久久久一区二区三区 | 久久综合伊人77777蜜臀| 国产精品日韩欧美一区| 一级成人国产| 亚洲欧美日韩第一区| 国产精品毛片a∨一区二区三区|国| 99re国产精品| 亚洲综合第一页| 国产日产欧产精品推荐色| 亚洲欧美99| 久久久久久有精品国产| 一区二区视频免费完整版观看| 欧美一级精品大片| 欧美成人国产| 在线视频欧美日韩精品| 国产精品黄页免费高清在线观看| 亚洲视频精品在线| 欧美与黑人午夜性猛交久久久| 国产欧美一区二区精品性色| 久久国产精品99国产精| 欧美福利电影网| 宅男噜噜噜66国产日韩在线观看| 欧美性大战久久久久| 欧美影院在线播放| 亚洲电影天堂av| 亚洲自拍偷拍一区| 国产一区二区三区四区三区四| 一区二区三区你懂的| 国产精品视频999| 久久久五月婷婷| 亚洲经典自拍| 欧美一区二区三区久久精品| 影音先锋欧美精品| 欧美激情女人20p| 亚洲欧美日韩一区二区| 欧美成人情趣视频| 亚洲一区一卡| 亚洲国产精品传媒在线观看| 欧美视频免费在线观看| 久久婷婷国产综合精品青草| 亚洲欧洲综合| 久久欧美中文字幕| 这里只有精品在线播放| 国内精品一区二区| 欧美视频中文一区二区三区在线观看| 午夜国产精品视频免费体验区| 欧美v亚洲v综合ⅴ国产v| 亚洲欧美视频在线观看| 91久久线看在观草草青青| 国产日韩一区二区三区在线播放 | 亚洲一区二区不卡免费| 欧美大片一区| 久久久久久久久久久久久女国产乱| 一区二区三区 在线观看视| 合欧美一区二区三区| 国产精品久久久久久久久搜平片 | 欧美午夜无遮挡| 免费国产一区二区| 欧美一区精品| 亚洲线精品一区二区三区八戒| 免费成人性网站| 久久久99久久精品女同性| 亚洲一区免费观看| 99这里只有精品| 亚洲黄色视屏| 亚洲电影中文字幕| 国内精品模特av私拍在线观看| 国产精品久久久久久久久久ktv| 欧美不卡一卡二卡免费版| 浪潮色综合久久天堂| 久久久蜜桃一区二区人| 久久久91精品国产一区二区三区| 亚洲图片欧洲图片日韩av| 99re6热只有精品免费观看| 亚洲三级免费| 亚洲欧洲午夜| 亚洲精品国产精品国产自| 亚洲国产精品一区制服丝袜| 欧美肥婆在线| 91久久精品一区二区别| 最新中文字幕亚洲| 亚洲精品一线二线三线无人区| 欧美激情一二三区| 亚洲国产成人精品女人久久久| 欧美激情综合色| 亚洲激情成人网| 日韩视频一区二区三区在线播放免费观看| 欧美福利一区二区三区| 亚洲国产精品va在线看黑人 | 久热精品视频在线观看一区| 久久久水蜜桃| 欧美日本三区| 国产精品久久7| 国产欧美一区二区精品仙草咪| 国产日韩欧美一区二区三区四区| 国产一区亚洲| 亚洲黄一区二区| 中日韩高清电影网| 亚洲欧美另类中文字幕| 欧美中文字幕不卡| 久久综合一区二区| 最新国产精品拍自在线播放| 一本大道久久a久久综合婷婷| 亚洲在线免费| 久久―日本道色综合久久| 欧美wwwwww| 国产精品夜夜夜一区二区三区尤| 国产亚洲精品久久飘花 | 欧美日韩国产精品自在自线| 欧美色视频一区| 国语自产精品视频在线看| 亚洲国产日韩一区| 亚洲欧美成人在线| 免费不卡欧美自拍视频| 夜夜嗨av一区二区三区网页| 欧美一区永久视频免费观看| 你懂的国产精品永久在线| 国产精品视频不卡| 亚洲日本成人女熟在线观看| 午夜国产欧美理论在线播放| 欧美黑人国产人伦爽爽爽| 99精品福利视频| 久久久久久一区二区| 国产精品高清免费在线观看| 亚洲大片一区二区三区| 亚洲欧美国产日韩中文字幕| 欧美ed2k| 午夜久久美女| 欧美日韩国产专区| 亚洲黄色性网站| 久久久久久一区二区三区| 一本大道av伊人久久综合| 久久一综合视频| 国产亚洲欧美日韩在线一区 |