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

投影矩陣的實現以及如何從投影矩陣中獲取各視裁體平面(教程)

投影矩陣的實現以及如何從投影矩陣中獲取各視裁體平面(教程):

flipcode@msn.com
一.投影的實現:
以D3D為例,先看一下D3D有前設置投影矩陣參數的函數:
D3DXMATRIX *WINAPI D3DXMatrixPerspectiveFovLH(
D3DXMATRIX *pOut,
FLOAT fovy,
FLOAT Aspect,
FLOAT zn,
FLOAT zf
);
第一個是輸出的結果,第二個是視角,第三個是屏幕寬高比,第四個是近平面,第五個是遠平面.
其實如果不用作視裁剪,只作屏幕投影的話只需用到fovy和aspect,下面我們先求ys的投影,而求出
ys后x的投影xs我們只需根據屏幕寬高比aspect來作一下調整就可以了.


(圖1)
o = camera's postion
SC = screen's upper half hight (i.e. screen height/2)

p = a point will project to our screen
d = OS (the distance from O to S)
下面來求ys:
由于OSP1與OMP相似,故
d/z = ys/y
轉換一下,得:
ys = d*y/z
現在只差一個未知的d了,
那么d怎么求呢?下面來看一個圖:


 


o = camera's postion
SC = screen's upper half hight (i.e. screen height/2)

d = OA (the distance from O to A)
@ = fov/2
從上圖可知tag(@)=SC/d即tag(fov/2)=SC/d,其中fov是已知的(由參數傳進),
那么SC呢?查看D3D的文檔知道D3D的project空間的
可視范圍定義為x∈[-1,1], y∈[-1,1], z∈[0,1]的一個長方體(下面圖2和圖3)。
(注:ogl的是z∈[[1,1])
從project空間的z負半軸看看我們的變換目標




從project空間的x正半軸看看我們的變換目標



這可看作中間坐標系,從這個坐標系到屏幕坐標只需作放縮和平移操作即可
這樣定義的好處是避免一些設備相關性的東西來分散我們的注意力,集中把算法
弄好后而在最后再作調整就可以了.
從上圖看出SC=1,故d=1/tag(fov/2)=cot(fov/2);
好,經過這么一番折騰我們最終得到了ys= y*d/z=y*cot(fov/2)/z;
而xs計算同理,但是由于屏幕寬高實際上是不等的,所以可通過參數aspect縱橫比
進行調整,xs=x*cot(fov/2)/z/aspect;,另外為了得以使用矩陣乘法,
我們可以利用w分量來保存z(因為w分量在投影矩陣之前都沒用到過),
最后才讓x/w,y/w來得到正確的投影值,
從而可以得到矩陣如下:
d/aspect 0 0 0
0 d 0 0
0 0 1 1
0 0 0 0
(其中d=cot(fov/2))
二.裁剪:
  由上面矩陣我們就可以將一個三維的物體坐標轉投影轉換到二維的屏幕空間了,但是為了
去掉那些離攝象相很近或是在攝象機后面(投影會變反)或是離攝像很遠的物體從而減輕
渲染的負擔(以及修正反向投影),我們還要處理一個要投影到(0-1)的z分量.
而這個時候就要用到D3DXMatrixPerspectiveFovLH的最后兩個參數了(i.e.近平面及遠平面)
下面來討論它:
如圖:




o = camera's postion
@ = fov/2
N = near plane
F = far plane
p = a point will project to our screen
從上圖可以看到N就是我們要作裁剪用的近平面,而F就是我們要作裁剪用遠平面,
近平面和遠平面可從參數得來,這時我們想作的是讓落在N和F上的點映射到0到1的
線性坐標上,也就是說當p的z=N時投影后的zs=0,而當z=F時投影后的zs=1;
這個很好辦:zs=(z-N)/(F-N)即可.
好了,這一步也輕松辦到了,但是我們前面為了實際用矩陣變換來作投影而讓其在
投影后再/w(w保存z值)才是最后的結果. 既然這樣那么我們所求的就是還未除過w的
投影值為zw. 想一下,當z=F時我們投影后的zs=zw/z=1,也就是zs=zw/F=1;所以zw=zs*F,
因為前面求得zs=(z-N)/(F-N),所以zw=F*(z-N)/(F-N);(簡單驗證一下:當z=N時,zw=0,這時
zs=0/w還是0,而當z增大時0<zw<=F,也就是0<zs<=1,而直到z=F時,zw=F,這時zs=F/w=F/F=1),
為了方便將其分解成:zw=(z*F-N*F)/(F-N)=z*F/(F-N)-N*F/(F-N)
這樣就可以把它應用到矩陣中,如下:
d/aspect 0 0 0
0 d 0 0
0 0 F/(F-N) 1
0 0 -N*F/(F-N) 0

以上公式可以代替D3DXMatrixPerspectiveFovLH來作測試:
void myMatrixPerspectiveFovLH(mat4 *out, float fov, float aspect, float n, float f)
{
float h = tanf(0.5*fov);
float w = h * aspect;
out = mat4( 1.0f/w, 0, 0, 0
0 1.0f/h 0 0
0 0 f/(f-n) 1
0 0 -n*f/(f-n) 0);
}
其中1.0f/h 就是cot(fov/2), aspect=width/height

三.從投影矩陣獲取視裁體:
上面已說過對一點投影后的各分量值所在范圍為:
-1<xs<1;
-1<ys<1;
0<zs<1;
  其中xs/ys/zs是除過w后的值,而未除過w的值所在范圍是:
  -w<xw<w; -w<yw<w;
0<zw<w;
對各不等式進分解后得:
xw+w>0;且xw-w<0;
yw+w>0;且yw-w<0;
zw>0;且xw-w<0;
我們知道xw/yw/zw是一個在view space中的點v(xv,yv,zv,wv)(其中wv=1)乘上投影矩陣后的各分量值(當然還未除以w),那么
點v(xv,yv,zv,wv)是如何乘上投影矩陣的呢?是這樣的:
xw = xv*prj_11+yv*prj_21*prj_31+wv*prj_41;
zw = xv*prj_12+yv*prj_22*prj_32+wv*prj_42;
zw = xv*prj_13+yv*prj_23*prj_33+wv*prj_43;
w = xv*prj_14+yv*prj_24*prj_34+wv*prj_44;
即:
xw = v dop col1;
yw = v dop col2;
zw = v dop col3;
w = v dop col4;
(說明:上述col1和col2及col3其實表達了一個投影坐標系,其中col1表示x軸,col2表示y軸,col3表示z軸,
而點v乘上這個坐標系就相當于求出點v在此新坐標系中各分量上的投影值,此外col4只是簡單的為了讓點v點乘它時求得w=原點v的w分量值)
故:
xw+w>0;
即:
v dop col1 + v dop col4 > 0;
即:
v dop ( col1 + col4 ) > 0;
也就是:
xv*(prj_11+prj_14) + yv*(prj_21+prj_24) + zv*(prj_31+prj_34) + wv*(prj_41+prj_44) > 0;
我們知道平面公式是: ax+by+cz+d=0,故上面其實表示的就是視裁體的左平面向內,其中它的法線是:
(prj_11+prj_14), (prj_21+prj_24), (prj_31+prj_34).
而由于wv=1,
故它的距離是(prj_41+prj_44).
同理我們可以求出視裁體的其它平面.

四.Frustum Culling
  我們知道,視裁體的六個面是朝向內的,由上面已經得到了各平面等式,只要用P DOP N + D看是否大于0就可以知道點P是否在一個平面

內,最后點P如果在所有平面內的才是在視裁體內.
而當判斷一個物體是否在視裁體內時,我們只需對物體的包圍盒進行測試,例如,測試一個包圍球是否在視裁體內,只要判斷所有P DOP N + D

>2的1/2次方*R不等式成立即可.

參考文檔:
fast extraction of viewing frustum planes from the world-view-projection matrix

posted on 2008-04-16 09:49 RedLight 閱讀(2221) 評論(0)  編輯 收藏 引用 所屬分類: 3D渲染技術

<2009年5月>
262728293012
3456789
10111213141516
17181920212223
24252627282930
31123456

導航

統計

公告


Name: Galen
QQ: 88104725

常用鏈接

留言簿(3)

隨筆分類

隨筆檔案

相冊

My Friend

搜索

最新評論

閱讀排行榜

評論排行榜

青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <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| 翔田千里一区二区| 久久婷婷影院| 99在线视频精品| 久热这里只精品99re8久| 毛片精品免费在线观看| 国产精品一区免费观看| 免费成人毛片| 亚洲少妇一区| 欧美日韩成人一区| 亚洲人成在线播放| 麻豆精品国产91久久久久久| 亚洲自拍偷拍麻豆| 国产精品入口麻豆原神| 亚洲午夜精品一区二区| 亚洲人被黑人高潮完整版| 久久午夜精品一区二区| 在线观看国产精品网站| 久久一区精品| 免费h精品视频在线播放| 亚洲国产日韩一级| 亚洲电影第三页| 欧美国产欧美亚州国产日韩mv天天看完整| 精品88久久久久88久久久| 久久综合999| 久久综合国产精品| 亚洲人成网站999久久久综合 | 午夜在线视频一区二区区别| 一本色道88久久加勒比精品| 欧美日韩一区在线| 欧美亚洲三级| 久久免费一区| 99精品欧美一区二区三区综合在线| 亚洲品质自拍| 欧美性猛交xxxx免费看久久久| 亚洲欧美日韩第一区| 亚洲欧美日本国产有色| 狠狠色综合网| 日韩亚洲欧美成人一区| 国产精品免费一区二区三区在线观看 | 午夜精品久久久| 欧美在线视频免费播放| 亚洲国产精品久久久久婷婷884| 亚洲国产你懂的| 欧美调教视频| 老司机精品久久| 欧美午夜精品理论片a级大开眼界| 午夜精品久久久| 久久人人九九| 亚洲小说欧美另类社区| 久久久精品久久久久| 日韩午夜一区| 久久激情五月丁香伊人| 99视频在线精品国自产拍免费观看| 欧美精品尤物在线| 欧美一级视频一区二区| 久久久久久久一区二区| 日韩视频免费大全中文字幕| 亚洲影视中文字幕| 在线观看日韩av电影| 亚洲精品久久久久久久久久久久久 | 欧美一区二区在线免费观看 | 欧美精品国产精品| 亚洲高清精品中出| 中文久久精品| 亚洲高清视频的网址| 亚洲美女免费精品视频在线观看| 国产精品jizz在线观看美国| 久久视频在线视频| 国产精品男女猛烈高潮激情| 欧美二区视频| 国产一区久久久| 夜夜狂射影院欧美极品| 在线看欧美视频| 午夜精品在线观看| 亚洲影院免费观看| 久久野战av| 亚洲欧洲一区二区三区久久| 亚洲欧美伊人| 亚洲午夜视频在线| 欧美成人a视频| 久久综合九色欧美综合狠狠| 在线亚洲精品福利网址导航| 久久欧美中文字幕| 亚洲免费在线| 欧美高潮视频| 欧美大片免费| 亚洲国产日韩欧美在线图片| 久久av一区二区三区漫画| 亚洲天堂成人在线观看| 欧美成人69| 亚洲国产免费| 一区二区三区福利| 欧美激情精品久久久久久大尺度| 蜜桃精品一区二区三区| 国产一区二区三区奇米久涩| 亚洲自拍偷拍视频| 久久精品一区二区三区不卡| 国产免费亚洲高清| 亚洲伊人网站| 性做久久久久久久免费看| 国产精品毛片va一区二区三区| 亚洲免费久久| 在线精品视频免费观看 | 久久精品二区三区| 久久免费视频一区| 亚洲第一天堂无码专区| 久久一区欧美| 亚洲激情精品| 一区二区免费在线观看| 欧美日韩在线播放| 亚洲欧美日韩在线| 久久香蕉国产线看观看av| 亚洲福利久久| 欧美激情一区二区三区在线视频| 91久久综合亚洲鲁鲁五月天| 一区二区三区欧美亚洲| 国产欧美综合在线| 噜噜噜91成人网| 日韩一级二级三级| 久久久久久久波多野高潮日日| 黄色亚洲在线| 欧美精品免费在线观看| 欧美成人免费播放| 欧美成在线观看| 亚洲高清免费在线| 欧美日韩在线直播| 午夜免费在线观看精品视频| 久久综合九色九九| 9国产精品视频| 国产视频久久久久| 欧美顶级大胆免费视频| 亚洲欧美乱综合| 亚洲日本一区二区| 久久黄色小说| 99re6热只有精品免费观看| 国产精品网站在线观看| 裸体歌舞表演一区二区| 正在播放日韩| 亚洲第一精品夜夜躁人人爽| 亚洲影院色在线观看免费| 一区二区在线视频| 国产精品扒开腿爽爽爽视频| 欧美一区二视频在线免费观看| 欧美激情一区二区三区全黄| 亚洲综合色自拍一区| 久久久中精品2020中文| 一区二区三区成人| 亚洲国产精品福利| 亚洲女人天堂av| 亚洲美女视频| 国产视频不卡| 国产精品日韩精品欧美精品| 欧美高清视频在线观看| 午夜视频在线观看一区二区三区| 欧美一级在线视频| 91久久国产精品91久久性色| 国产一区二区三区的电影 | 国内精品一区二区三区| 欧美高清视频在线播放| 美国十次了思思久久精品导航| 亚洲老司机av| 美女尤物久久精品| 欧美一区二区三区四区高清| 91久久视频| 一区视频在线看| 国产精品永久在线| 亚洲免费av片| 玖玖玖国产精品| 欧美亚洲免费电影| 亚洲一二区在线| 亚洲高清网站| 午夜久久久久久| 亚洲高清激情| 亚洲电影免费观看高清完整版在线观看| 欧美在线你懂的| 宅男噜噜噜66国产日韩在线观看| 亚洲免费电影在线观看| 国产真实久久| 一区视频在线播放| 国产亚洲精品高潮| 国内一区二区三区| 久久久综合香蕉尹人综合网| 久久这里有精品视频| 麻豆91精品91久久久的内涵| 欧美一区三区二区在线观看| 欧美一区二区三区四区夜夜大片| 夜夜嗨网站十八久久| 亚洲免费视频一区二区| 欧美电影免费观看网站| 91久久在线播放| 99精品久久久| 精东粉嫩av免费一区二区三区| 精品成人a区在线观看| 激情五月综合色婷婷一区二区| 尤物yw午夜国产精品视频明星| 国产精品日韩在线播放| 黄色成人av网站| 亚洲人成毛片在线播放女女|