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

天行健 君子當(dāng)自強(qiáng)而不息

頂點(diǎn)坐標(biāo)變換(5)

投影變換

將攝影空間中的三維物體投影到二維膠片上,也就是Direct3D中的屏幕,這種三維到二維的變換過程就是投影變換,即從取景空間到攝影空間的變換。設(shè)三維物體在觀察空間中的坐標(biāo)為Pview,投影矩陣為Mproj,則頂點(diǎn)在投影空間中的坐標(biāo)為:

Pproj = Pview * Mproj

下面分別介紹兩種基本的投影變換:正交投影和透視投影,以及它們?cè)贒irect3D中的實(shí)現(xiàn)。

 

1、正交投影

正交投影中,投影向量和觀察平面垂直,物體坐標(biāo)沿觀察坐標(biāo)系的z軸平行投影到觀察平面上,觀察點(diǎn)和觀察平面間的距離不會(huì)影響物體的投影大小。

工程設(shè)計(jì)中的頂視圖、前視圖和側(cè)視圖就是典型的正交投影。與世界變換、取景變換類似,只需先生成一個(gè)投影矩陣mat_proj,然后調(diào)用下面的代碼就可以設(shè)置投影矩陣:

g_device->SetTransform(D3DTS_PROJECTION, &mat_proj);

下面來(lái)看看正交投影矩陣的生成。對(duì)于正交投影來(lái)說(shuō),它的取景范圍是一個(gè)長(zhǎng)方體,只有在這個(gè)長(zhǎng)方體中的景物才會(huì)被繪制出來(lái)。

Direct3D擴(kuò)展實(shí)用庫(kù)提供了函數(shù)D3DXMatrixOrthoLH(),用于創(chuàng)建一個(gè)正交投影矩陣,函數(shù)D3DXMatrixOrthoLH()的聲明如下:

Builds a left-handed orthographic projection matrix.

D3DXMATRIX * D3DXMatrixOrthoLH(
D3DXMATRIX * pOut,
FLOAT w,
FLOAT h,
FLOAT zn,
FLOAT zf
);

Parameters

pOut
[in, out] Pointer to the resulting D3DXMATRIX.
w
[in] Width of the view volume.
h
[in] Height of the view volume.
zn
[in] Minimum z-value of the view volume which is referred to as z-near.
zf
[in] Maximum z-value of the view volume which is referred to as z-far.

Return Values

Pointer to the resulting D3DXMATRIX.

Remarks

All the parameters of the D3DXMatrixOrthoLH function are distances in camera space. The parameters describe the dimensions of the view volume.

The return value for this function is the same value returned in the pOut parameter. In this way, the D3DXMatrixOrthoLH function can be used as a parameter for another function.

This function uses the following formula to compute the returned matrix.

2/w  0    0           0
0 2/h 0 0
0 0 1/(zf-zn) 0
0 0 -zn/(zf-zn) 1
 

2、透視投影

透視投影實(shí)現(xiàn)的是一個(gè)縮放、透視的投影。透視投影的特點(diǎn)是,距離攝像機(jī)越遠(yuǎn)的物體在投影平面上的成像越小,透視投影的取景范圍是一個(gè)截頭體(四棱臺(tái))。這個(gè)截頭體稱為取景截頭體(viewing frustum),攝像機(jī)位于四棱錐的頂點(diǎn)。這個(gè)四棱錐被截頭體的遠(yuǎn)平面和近平面分割,遠(yuǎn)近裁剪面中間的部分就是取景截頭體,只有這個(gè)空間里的對(duì)象才是可見的。

透視投影矩陣的作用就是將取景截頭體內(nèi)的景物投影到攝像機(jī)的二維膠片上,可以利用Direct3D功能擴(kuò)展庫(kù)提供的D3DXMatrixPerspectiveFovLH(),構(gòu)建一個(gè)透視投影矩陣:

Builds a left-handed perspective projection matrix based on a field of view.

D3DXMATRIX * D3DXMatrixPerspectiveFovLH(
D3DXMATRIX * pOut,
FLOAT fovy,
FLOAT Aspect,
FLOAT zn,
FLOAT zf
);

Parameters

pOut
[in, out] Pointer to the D3DXMATRIX structure that is the result of the operation.
fovy
[in] Field of view in the y direction, in radians.
Aspect
[in] Aspect ratio, defined as view space width divided by height.
zn
[in] Z-value of the near view-plane.
zf
[in] Z-value of the far view-plane.

Return Values

Pointer to a D3DXMATRIX structure that is a left-handed perspective projection matrix.

Remarks

The return value for this function is the same value returned in the pOut parameter. In this way, the D3DXMatrixPerspectiveFovLH function can be used as a parameter for another function.

This function computes the returned matrix as shown:

xScale     0          0               0
0 yScale 0 0
0 0 zf/(zf-zn) 1
0 0 -zn*zf/(zf-zn) 0
where:
yScale = cot(fovY/2)

xScale = yScale / aspect ratio

透視投影矩陣的作用是將一個(gè)取景截頭體轉(zhuǎn)換成一個(gè)立方體。因?yàn)榻仡^體的近端比遠(yuǎn)端小,所以靠近攝像機(jī)的對(duì)象將被放大,而對(duì)象距離攝像機(jī)越遠(yuǎn),其成像越小,這就是場(chǎng)景的透視原理。透視變換把一個(gè)取景截頭體轉(zhuǎn)換成一個(gè)新的坐標(biāo)空間,注意,該截頭體變成了一個(gè)立方體,同時(shí),原點(diǎn)從場(chǎng)景的右上角移動(dòng)到了立方體的中心。在透視變換中,x軸和z軸方向的極限都是-1和1,z軸方向?qū)τ谇捌矫娴臉O限是0,對(duì)后平面的極限是1。

另外,D3DX還提供了下列函數(shù)供程序員創(chuàng)建透視投影變換矩陣:

D3DXMatrixPerspectiveLH

Builds a left-handed perspective projection matrix

D3DXMATRIX * D3DXMatrixPerspectiveLH(
D3DXMATRIX * pOut,
FLOAT w,
FLOAT h,
FLOAT zn,
FLOAT zf
);

Parameters

pOut
[in, out] Pointer to the D3DXMATRIX structure that is the result of the operation.
w
[in] Width of the view volume at the near view-plane.
h
[in] Height of the view volume at the near view-plane.
zn
[in] Z-value of the near view-plane.
zf
[in] Z-value of the far view-plane.

Return Values

Pointer to a D3DXMATRIX structure that is a left-handed perspective projection matrix.

Remarks

All the parameters of the D3DXMatrixPerspectiveLH function are distances in camera space. The parameters describe the dimensions of the view volume.

The return value for this function is the same value returned in the pOut parameter. In this way, the D3DXMatrixPerspectiveLH function can be used as a parameter for another function.

This function uses the following formula to compute the returned matrix.

2*zn/w  0       0              0
0 2*zn/h 0 0
0 0 zf/(zf-zn) 1
0 0 zn*zf/(zn-zf) 0
 

D3DXMatrixPerspectiveRH

Builds a right-handed perspective projection matrix.

D3DXMATRIX * D3DXMatrixPerspectiveRH(
D3DXMATRIX * pOut,
FLOAT w,
FLOAT h,
FLOAT zn,
FLOAT zf
);

Parameters

pOut
[in, out] Pointer to the D3DXMATRIX structure that is the result of the operation.
w
[in] Width of the view volume at the near view-plane.
h
[in] Height of the view volume at the near view-plane.
zn
[in] Z-value of the near view-plane.
zf
[in] Z-value of the far view-plane.

Return Values

Pointer to a D3DXMATRIX structure that is a right-handed perspective projection matrix.

Remarks

All the parameters of the D3DXMatrixPerspectiveRH function are distances in camera space. The parameters describe the dimensions of the view volume.

The return value for this function is the same value returned in the pOut parameter. In this way, the D3DXMatrixPerspectiveRH function can be used as a parameter for another function.

This function uses the following formula to compute the returned matrix.

2*zn/w  0       0              0
0 2*zn/h 0 0
0 0 zf/(zn-zf) -1
0 0 zn*zf/(zn-zf) 0

 

D3DXMatrixPerspectiveFovRH

Builds a right-handed perspective projection matrix based on a field of view.

D3DXMATRIX * D3DXMatrixPerspectiveFovRH(
D3DXMATRIX * pOut,
FLOAT fovy,
FLOAT Aspect,
FLOAT zn,
FLOAT zf
);

Parameters

pOut
[in, out] Pointer to the D3DXMATRIX structure that is the result of the operation.
fovy
[in] Field of view in the y direction, in radians.
Aspect
[in] Aspect ratio, defined as view space width divided by height.
zn
[in] Z-value of the near view-plane.
zf
[in] Z-value of the far view-plane.

Return Values

Pointer to a D3DXMATRIX structure that is a right-handed perspective projection matrix.

Remarks

The return value for this function is the same value returned in the pOut parameter. In this way, the D3DXMatrixPerspectiveFovRH function can be used as a parameter for another function.

This function computes the returned matrix as shown.

xScale     0          0              0
0 yScale 0 0
0 0 zf/(zn-zf) -1
0 0 zn*zf/(zn-zf) 0
where:
yScale = cot(fovY/2)

xScale = yScale / aspect ratio

 

D3DXMatrixPerspectiveOffCenterLH

Builds a customized, left-handed perspective projection matrix.

D3DXMATRIX * D3DXMatrixPerspectiveOffCenterLH(
D3DXMATRIX * pOut,
FLOAT l,
FLOAT r,
FLOAT b,
FLOAT t,
FLOAT zn,
FLOAT zf
);

Parameters

pOut
[in, out] Pointer to the D3DXMATRIX structure that is the result of the operation.
l
[in] Minimum x-value of the view volume.
r
[in] Maximum x-value of the view volume.
b
[in] Minimum y-value of the view volume.
t
[in] Maximum y-value of the view volume.
zn
[in] Minimum z-value of the view volume.
zf
[in] Maximum z-value of the view volume.

Return Values

Pointer to a D3DXMATRIX structure that is a customized, left-handed perspective projection matrix.

Remarks

All the parameters of the D3DXMatrixPerspectiveOffCenterLH function are distances in camera space. The parameters describe the dimensions of the view volume.

The return value for this function is the same value returned in the pOut parameter. In this way, the D3DXMatrixPerspectiveOffCenterLH function can be used as a parameter for another function.

This function uses the following formula to compute the returned matrix.

2*zn/(r-l)   0            0              0
0 2*zn/(t-b) 0 0
(l+r)/(l-r) (t+b)/(b-t) zf/(zf-zn) 1
0 0 zn*zf/(zn-zf) 0

D3DXMatrixPerspectiveOffCenterRH

Builds a customized, right-handed perspective projection matrix.

D3DXMATRIX * D3DXMatrixPerspectiveOffCenterRH(
D3DXMATRIX * pOut,
FLOAT l,
FLOAT r,
FLOAT b,
FLOAT t,
FLOAT zn,
FLOAT zf
);

Parameters

pOut
[in, out] Pointer to the D3DXMATRIX structure that is the result of the operation.
l
[in] Minimum x-value of the view volume.
r
[in] Maximum x-value of the view volume.
b
[in] Minimum y-value of the view volume.
t
[in] Maximum y-value of the view volume.
zn
[in] Minimum z-value of the view volume.
zf
[in] Maximum z-value of the view volume.

Return Values

Pointer to a D3DXMATRIX structure that is a customized, right-handed perspective projection matrix.

Remarks

All the parameters of the D3DXMatrixPerspectiveOffCenterRH function are distances in camera space. The parameters describe the dimensions of the view volume.

The return value for this function is the same value returned in the pOut parameter. In this way, the D3DXMatrixPerspectiveOffCenterRH function can be used as a parameter for another function.

This function uses the following formula to compute the returned matrix.

2*zn/(r-l)   0            0                0
0 2*zn/(t-b) 0 0
(l+r)/(r-l) (t+b)/(t-b) zf/(zn-zf) -1
0 0 zn*zf/(zn-zf) 0

3、w友好投影矩陣

經(jīng)過頂點(diǎn)坐標(biāo)變換后,每個(gè)頂點(diǎn)坐標(biāo)將具有4個(gè)元素(x, y, z, w)。Direct3D使用這個(gè)w坐標(biāo)在深度緩沖區(qū)和霧化效果中執(zhí)行一些深度相關(guān)的運(yùn)算。為了能夠使用這個(gè)w坐標(biāo)進(jìn)行深度相關(guān)運(yùn)算,要求投影矩陣必須是w友好投影矩陣(w-friendly projection matrix,也稱作兼容矩陣),即投影矩陣第三行第四列的元素必須是1,以使w坐標(biāo)與世界空間中頂點(diǎn)的z坐標(biāo)相當(dāng)。如果投影變換矩陣第三行第四列的元素不是1,必須將所有的矩陣元素除以投影矩陣第三行第四列元素的值,將投影矩陣變換為w友好投影矩陣。如果沒有提供一個(gè)w友好投影矩陣,基于深度的霧化效果和深度緩沖就不能正確實(shí)現(xiàn)。

下面給出的就是從一個(gè)非w友好投影矩陣到w友好投影矩陣的轉(zhuǎn)換。

Direct3D在進(jìn)行以w為基礎(chǔ)的深度計(jì)算中,需要使用w友好投影矩陣,因此即使應(yīng)用程序不需要進(jìn)行頂點(diǎn)坐標(biāo)變換,也需要設(shè)置一個(gè)w友好投影矩陣。通過實(shí)用庫(kù)函數(shù)D3DXMatrixPerspectiveFovLH()得到的投影矩陣通常都是w友好投影矩陣,所以通常不需要關(guān)心這個(gè)問題。


posted on 2008-05-02 13:02 lovedday 閱讀(2733) 評(píng)論(0)  編輯 收藏 引用


只有注冊(cè)用戶登錄后才能發(fā)表評(píng)論。
網(wǎng)站導(dǎo)航: 博客園   IT新聞   BlogJava   博問   Chat2DB   管理


公告

導(dǎo)航

統(tǒng)計(jì)

常用鏈接

隨筆分類(178)

3D游戲編程相關(guān)鏈接

搜索

最新評(píng)論

青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <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>
            亚洲激情女人| 欧美精品久久久久久久久久| 欧美成人资源网| 久久综合网色—综合色88| 久久精品一区二区| 久久久久久午夜| 欧美韩国在线| 日韩视频免费观看| 亚洲免费影视第一页| 欧美中文在线观看国产| 久久久噜噜噜久久久| 免费观看日韩av| 欧美体内she精视频| 狠狠久久五月精品中文字幕| 亚洲黄色影院| 亚洲一区二区三区视频播放| 久久精品国产亚洲a| 亚洲电影免费观看高清| 亚洲国产精品传媒在线观看| 一区二区三区欧美| 久久久久久欧美| 欧美午夜不卡| 亚洲国产一区二区精品专区| 亚洲欧美成人在线| 欧美freesex交免费视频| 在线中文字幕不卡| 久热爱精品视频线路一| 国产精品久线观看视频| 在线看片欧美| 亚洲欧洲av一区二区| 亚洲电影免费在线观看| 欧美亚洲一级片| 欧美日韩在线一区二区三区| 亚洲第一级黄色片| 亚洲一区二区三区成人在线视频精品| 欧美一区二区视频97| 亚洲精品视频在线观看网站| 久久五月天婷婷| 国产日本欧美视频| 亚洲综合第一页| 国产亚洲精品bt天堂精选| 欧美精品 日韩| 国产深夜精品福利| 亚洲一区二区在线视频| 最新国产拍偷乱拍精品| 久久精品日产第一区二区三区| 欧美日韩无遮挡| 亚洲高清久久久| 久久综合久久久久88| 亚洲欧美日韩国产一区二区| 欧美日韩亚洲成人| 亚洲毛片在线免费观看| 欧美国产三区| 久久亚洲不卡| 亚洲二区免费| 欧美国产在线观看| 免费不卡在线视频| 亚洲欧洲久久| 亚洲激情校园春色| 欧美精品啪啪| 亚洲图片你懂的| 在线亚洲精品福利网址导航| 国产精品啊啊啊| 午夜日韩激情| 午夜精品一区二区三区在线播放| 国产精品久久| 久久国产福利| 久久久久国色av免费观看性色| 国内精品模特av私拍在线观看| 久久综合九色综合久99| 蜜桃久久精品乱码一区二区| 亚洲人成艺术| 99pao成人国产永久免费视频| 国产精品福利在线观看| 欧美淫片网站| 久久亚洲精品网站| 亚洲精品在线观| 亚洲小说春色综合另类电影| 国产一区二区三区直播精品电影 | 亚洲国产视频一区二区| 欧美国产一区二区在线观看 | 噜噜噜躁狠狠躁狠狠精品视频| 激情丁香综合| 亚洲日韩欧美视频一区| 欧美视频一区二区| 久久久久久综合网天天| 欧美成年人视频网站| 亚洲男女自偷自拍图片另类| 欧美在线视频观看免费网站| 亚洲精品女人| 午夜视频精品| a4yy欧美一区二区三区| 亚洲一区三区视频在线观看| av不卡在线观看| 亚洲人成在线观看一区二区| 久久综合九色综合久99| 欧美日韩日日骚| 久久久精品性| 欧美极品在线播放| 久久亚洲午夜电影| 欧美揉bbbbb揉bbbbb| 麻豆av福利av久久av| 国产精品扒开腿爽爽爽视频| 欧美.com| 国产日韩欧美综合在线| 日韩视频在线播放| 激情懂色av一区av二区av| 一本久久青青| 亚洲精品日日夜夜| 欧美专区在线观看| 午夜精品一区二区三区在线视| 免费在线观看精品| 久久精品亚洲一区二区| 欧美偷拍另类| 91久久久久久| 亚洲风情亚aⅴ在线发布| 亚洲欧美在线高清| 亚洲一区不卡| 欧美日韩不卡| 亚洲国产欧美一区二区三区同亚洲| 国产亚洲一区二区在线观看| 亚洲午夜激情网页| 亚洲午夜性刺激影院| 欧美激情视频给我| 亚洲国产成人不卡| 亚洲精品久久久久久久久久久| 美国三级日本三级久久99| 麻豆精品视频在线观看| 黄色精品一区二区| 久久国产精品久久久久久电车| 久久爱91午夜羞羞| 国产有码一区二区| 久久精品综合| 欧美大片在线观看一区| 亚洲国产精品高清久久久| 老司机成人在线视频| 欧美激情bt| av不卡在线观看| 国产精品久久久久久久久久三级| 一区二区三区久久精品| 欧美亚洲免费在线| 国产亚洲第一区| 久久久久久久网站| 欧美激情第1页| 国产精品99久久久久久www| 国产精品久久久久999| 亚洲一区二区三区视频| 久久精品人人做人人爽| 一区二区三区中文在线观看| 每日更新成人在线视频| 日韩视频免费观看| 久久激情五月激情| 亚洲国产精品久久91精品| 欧美日韩成人综合天天影院| 亚洲影院污污.| 男女精品网站| 亚洲综合日韩| 亚洲成人在线免费| 欧美日韩一区三区| 欧美一区二区三区四区在线观看| 免费观看成人| 亚洲一区欧美二区| 久久在线观看视频| 在线国产精品播放| 午夜精品亚洲| 欧美国产精品va在线观看| 99精品国产在热久久婷婷| 欧美香蕉视频| 久久成年人视频| 91久久精品久久国产性色也91| 亚洲已满18点击进入久久| 激情成人亚洲| 欧美亚洲不卡| 久久蜜桃香蕉精品一区二区三区| 亚洲国产小视频在线观看| 久久精品国产一区二区三区免费看| 亚洲国产婷婷香蕉久久久久久99 | 欧美激情乱人伦| 亚洲一区二区网站| 亚洲激情电影在线| 久久综合网络一区二区| 亚洲欧美日韩在线高清直播| 亚洲激情网址| 国内精品视频久久| 国产精品家庭影院| 欧美日韩xxxxx| 蜜桃av噜噜一区| 久久国产精品一区二区三区| 亚洲私人影院在线观看| 最新国产乱人伦偷精品免费网站| 久久午夜视频| 久久精品久久综合| 亚洲欧洲av一区二区| 亚洲视频 欧洲视频| 亚洲精品美女久久7777777| 尤物yw午夜国产精品视频明星| 国产欧美日韩免费| 国产精品久久久久秋霞鲁丝| 欧美日韩一区成人| 欧美日韩1区2区3区|