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

天行健 君子當(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);

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

Direct3D擴(kuò)展實(shí)用庫提供了函數(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ò)展庫提供的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),其成像越小,這就是場景的透視原理。透視變換把一個(gè)取景截頭體轉(zhuǎn)換成一個(gè)新的坐標(biāo)空間,注意,該截頭體變成了一個(gè)立方體,同時(shí),原點(diǎn)從場景的右上角移動(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í)用庫函數(shù)D3DXMatrixPerspectiveFovLH()得到的投影矩陣通常都是w友好投影矩陣,所以通常不需要關(guān)心這個(gè)問題。


posted on 2008-05-02 13:02 lovedday 閱讀(2740) 評(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>
            好吊成人免视频| 亚洲国产精品久久久久秋霞不卡| 欧美va亚洲va日韩∨a综合色| 国产亚洲精品aa| 久久精品国产精品亚洲综合| 亚洲欧美中文日韩在线| 国产精品一区视频网站| 欧美在线日韩| 久久精品日韩| 日韩系列欧美系列| 在线亚洲美日韩| 国内视频精品| 亚洲狠狠婷婷| 欧美色中文字幕| 久久国产综合精品| 裸体一区二区三区| 亚洲午夜极品| 久久久av毛片精品| 日韩视频在线播放| 亚洲一区视频在线| 加勒比av一区二区| 亚洲精品在线二区| 国产一区二区三区免费不卡| 亚洲高清av| 国产精品乱码一区二区三区 | 欧美精品xxxxbbbb| 午夜精品影院| 久久免费高清| 午夜精品久久久99热福利| 久久久久久69| 亚洲天堂av在线免费| 久久国产欧美日韩精品| 日韩午夜三级在线| 欧美在线观看视频| 亚洲视屏一区| 麻豆精品一区二区av白丝在线| 亚洲一二三区视频在线观看| 久久久久久一区二区| 亚洲女同精品视频| 欧美精品免费在线| 欧美电影美腿模特1979在线看| 欧美日韩精品一区视频| 免费高清在线一区| 国产精品―色哟哟| av成人免费在线| 亚洲精品少妇30p| 欧美在线在线| 午夜久久久久久久久久一区二区| 欧美成人精品影院| 理论片一区二区在线| 国产免费观看久久| 亚洲尤物在线视频观看| 亚洲一区欧美二区| 欧美人牲a欧美精品| 欧美激情a∨在线视频播放| 国产亚洲成精品久久| 亚洲网站视频福利| 一本一本a久久| 欧美黄污视频| 亚洲二区免费| 日韩视频不卡| 欧美福利专区| 亚洲精品社区| 一本综合久久| 欧美区在线观看| 亚洲精品一级| 一区二区三区高清在线| 亚洲图片在线观看| 亚洲校园激情| 国产精品久久综合| 亚洲欧美日韩精品| 久久精品视频亚洲| 精品动漫3d一区二区三区免费| 午夜精品久久久久久| 久久精品中文字幕免费mv| 国产日本精品| 久久久久9999亚洲精品| 欧美肥婆bbw| 日韩一级精品视频在线观看| 欧美另类videos死尸| 一区二区三区 在线观看视| 亚洲男女自偷自拍图片另类| 国产精品区一区二区三| 欧美一级二区| 欧美va天堂| 一区二区三区 在线观看视| 国产精品成人aaaaa网站| 欧美亚洲综合网| 嫩草影视亚洲| 一区二区三区久久精品| 国产精品丝袜白浆摸在线| 午夜视频一区在线观看| 免费视频一区| 国产精品99久久不卡二区| 国产精品综合视频| 久久综合伊人| 在线亚洲高清视频| 久久久精品tv| 日韩一级黄色大片| 国产一区二区三区奇米久涩 | 久久久久国产一区二区| 欧美高清视频一区二区三区在线观看| 亚洲精品日日夜夜| 国产精品永久免费视频| 免费在线视频一区| 亚洲午夜激情免费视频| 欧美91精品| 亚洲女爱视频在线| 最新日韩中文字幕| 国产日韩欧美另类| 欧美激情成人在线视频| 欧美亚洲免费在线| 日韩午夜在线视频| 牛夜精品久久久久久久99黑人| 在线亚洲精品| 亚洲高清不卡在线| 国产日韩欧美成人| 欧美系列精品| 欧美日韩不卡合集视频| 久久精品人人做人人爽| 亚洲午夜在线观看视频在线| 亚洲国产精品va在线观看黑人| 久久久噜噜噜| 午夜国产精品视频免费体验区| 日韩亚洲欧美成人一区| 精品不卡一区二区三区| 国产午夜精品久久久久久久| 欧美日韩一区国产| 欧美激情欧美狂野欧美精品| 久久久亚洲影院你懂的| 欧美一区二区三区免费大片| 亚洲——在线| 在线亚洲高清视频| 在线午夜精品自拍| 在线综合亚洲欧美在线视频| 亚洲高清色综合| 欧美国产视频在线| 欧美成人在线免费视频| 久久一综合视频| 蜜桃av久久久亚洲精品| 久久天堂成人| 久久久久综合网| 久久人人97超碰精品888| 久久久久国产精品麻豆ai换脸| 久久99伊人| 久久深夜福利| 久久阴道视频| 美乳少妇欧美精品| 欧美福利一区| 亚洲国产欧美一区二区三区久久 | 日韩视频免费| 一区二区三区高清在线观看| 夜夜爽夜夜爽精品视频| 亚洲视频一区二区在线观看| 亚洲一二区在线| 午夜在线一区| 久久精品视频免费| 免费观看一级特黄欧美大片| 免费视频最近日韩| 欧美日韩精品在线视频| 国产精品av久久久久久麻豆网| 国产精品免费在线| 国产亚洲一区二区在线观看| 激情欧美一区二区三区在线观看| 在线观看一区二区视频| 99re热精品| 香蕉久久精品日日躁夜夜躁| 久久精品首页| 亚洲欧洲美洲综合色网| 亚洲一区二区精品视频| 久久激情视频| 欧美精品一卡二卡| 国产精品久久久| 精品51国产黑色丝袜高跟鞋| 亚洲精品激情| 欧美亚洲免费在线| 欧美成人精品在线视频| 一本到12不卡视频在线dvd| 欧美亚洲一区二区三区| 美女图片一区二区| 国产精品日韩在线一区| 亚洲福利视频一区| 亚洲一区二区三区高清| 久久综合国产精品台湾中文娱乐网| 亚洲国产高清在线| 午夜在线a亚洲v天堂网2018| 欧美成人精品1314www| 国产精品视频内| 91久久综合| 久久久久久综合| a91a精品视频在线观看| 久久久久久伊人| 国产精品天美传媒入口| 亚洲精品乱码久久久久久日本蜜臀 | 午夜日韩在线观看| 欧美日韩国产不卡| 在线播放亚洲| 久久久精品久久久久| 一区二区av| 欧美久久久久久|