
1/16
坐標(biāo)系與右手定則(OpenInventor使用的坐標(biāo)系統(tǒng))
坐標(biāo)系與右手定則(OpenInventor使用的坐標(biāo)系統(tǒng))(轉(zhuǎn))
在三維坐標(biāo)系中,Z軸的正軸方向是根據(jù)右手定則確定的。右手定則也決定三維空間中任一坐標(biāo)軸的正旋
轉(zhuǎn)方向。
要標(biāo)注X、Y和Z軸的正軸方向,就將右手背對(duì)著屏幕放置,拇指即指向X軸的正方向。伸出食指和中
指,如右圖所示,食指指向Y軸的正方向,中指所指示的方向即是Z軸的正方向。
要確定軸的正旋轉(zhuǎn)方向,如右圖所示,用右手的大拇指指向軸的正方向,彎曲手指。那么手指所指示的
方向即是軸的正旋轉(zhuǎn)方向。OpenInventor對(duì)3D數(shù)據(jù)使用的是右手坐標(biāo)系,從屏幕內(nèi)指向外,表示z軸的
正方向。所有的角度單位都是弧度。對(duì)象都是在自己的局部坐標(biāo)系空間下進(jìn)行描述的,既眾所周知的"對(duì)
象坐標(biāo)系空間"(objectcoordinatespace)。當(dāng)場(chǎng)景中的所有物體都已經(jīng)進(jìn)行完坐標(biāo)變換后,那么它們就都
在"世界坐標(biāo)系空間"下描述了(worldcoordinatespace)。照相機(jī)和燈光節(jié)點(diǎn)處于世界坐標(biāo)系空間下。
三維坐標(biāo)系
三維坐標(biāo)系
2/16
三維笛卡兒坐標(biāo)系是在二維笛卡兒坐標(biāo)系的基礎(chǔ)上根據(jù)右手定則增加第三維坐標(biāo)(即Z軸)
而形成的。同二維坐標(biāo)系一樣,AutoCAD中的三維坐標(biāo)系有世界坐標(biāo)系WCS(World
CoordinateSystem)和用戶坐標(biāo)系UCS(UrCoordinateSystem)兩種形式。
目錄
展開
1.右手定則
1.右手定則
在三維坐標(biāo)系中,Z軸的正軸方向是根據(jù)右手定則確定的。右手定則
也決定三維空間中任一坐標(biāo)軸的正旋轉(zhuǎn)方向。
要標(biāo)注X、Y和Z軸的正軸方向,就將右手背對(duì)著屏幕放置,拇指
即指向X軸的正方向。伸出食指和中指,如右圖所示,食指指向Y軸的
正方向,中指所指示的方向即是Z軸的正方向。
要確定軸的正旋轉(zhuǎn)方向,如右圖所示,用右手的大拇指指向軸的正方向,彎曲手指。那么手指所
指示的方向即是軸的正旋轉(zhuǎn)方向。
2.世界坐標(biāo)系
2.世界坐標(biāo)系(WCS)
在AutoCAD中,三維世界坐標(biāo)系是在二維世界坐標(biāo)系的基礎(chǔ)上根據(jù)右手定則增加Z軸而形成
的。同二維世界坐標(biāo)系一樣,三維世界坐標(biāo)系是其他三維坐標(biāo)系的基礎(chǔ),不能對(duì)其重新定義。
3.用戶坐標(biāo)系
3.用戶坐標(biāo)系(UCS)
用戶坐標(biāo)系為坐標(biāo)輸入、操作平面和觀察提供一種可變動(dòng)的坐標(biāo)系。定義一個(gè)用戶坐標(biāo)系即改變
原點(diǎn)(0,0,0)的位置以及XY平面和Z軸的方向。可在AutoCAD的三維空間中任何位置定位和定
向UCS,也可隨時(shí)定義、保存和復(fù)用多個(gè)用戶坐標(biāo)系。詳見(jiàn)本章第3節(jié)。
3/16
三維坐標(biāo)形式
在AutoCAD中提供了下列三種三維坐標(biāo)形式:
1.三維笛卡爾坐標(biāo)
三維笛卡爾坐標(biāo)(X,Y,Z)與二維笛卡爾坐標(biāo)(X,Y)相似,即在X和Y值基礎(chǔ)上增加Z
值。同樣還可以使用基于當(dāng)前坐標(biāo)系原點(diǎn)的絕對(duì)坐標(biāo)值或基于上個(gè)輸入點(diǎn)的相對(duì)坐標(biāo)值。
2.圓柱坐標(biāo)
圓柱坐標(biāo)與二維極坐標(biāo)類似,但增加了從所要確定的點(diǎn)到XY平面的距離值。即三維點(diǎn)的圓柱坐
標(biāo)可通過(guò)該點(diǎn)與UCS原點(diǎn)連線在XY平面上的投影長(zhǎng)度,該投影與X軸夾角、以及該點(diǎn)垂直于XY平
面的Z值來(lái)確定。例如,坐標(biāo)“10<60,20”表示某點(diǎn)與原點(diǎn)的連線在XY平面上的投影長(zhǎng)度為10個(gè)單
位,其投影與X軸的夾角為60度,在Z軸上的投影點(diǎn)的Z值為20。
圓柱坐標(biāo)也有相對(duì)的坐標(biāo)形式,如相對(duì)圓柱坐標(biāo)“@10<45,30”表示某點(diǎn)與上個(gè)輸入點(diǎn)連線在
XY平面上的投影長(zhǎng)為10個(gè)單位,該投影與X軸正方向的夾角為45
度且Z軸的距離為30個(gè)單位。
3.球面坐標(biāo)
球面坐標(biāo)也類似與二維極坐標(biāo)。在確定某點(diǎn)時(shí),應(yīng)分別指定該點(diǎn)與當(dāng)前坐標(biāo)系原點(diǎn)的距離,二者
連線在XY平面上的投影與X軸的角度,以及二者連線與XY平面的角度。例如,坐標(biāo)“10<45<60”表
示一個(gè)點(diǎn),它與當(dāng)前UCS原點(diǎn)的距離為10個(gè)單位,在XY平面的投影與X軸的夾角為45度,該點(diǎn)與
XY平面的夾角為60度。
同樣,圓柱坐標(biāo)的相對(duì)形式表明了某點(diǎn)與上個(gè)輸入點(diǎn)的距離,二者連線在XY平面上的投影與X
軸的角度,以及二者連線與XY平面的角度。
數(shù)學(xué)中常用的三種三維坐標(biāo)系
4/16
1.三維笛卡爾坐標(biāo)系
三維笛卡爾坐標(biāo)(X,Y,Z)是在三維笛卡爾坐標(biāo)系下的點(diǎn)的表達(dá)式,其中,x,y,z分別是擁
有共同的零點(diǎn)且彼此相互正交的x軸,y軸,z軸的坐標(biāo)值。
2.圓柱坐標(biāo)系
圓柱坐標(biāo)(ρ,θ,z)是圓柱坐標(biāo)系上的點(diǎn)的表達(dá)式。設(shè)P(x,y,z)為空間內(nèi)一點(diǎn),則點(diǎn)P也
可用這樣三個(gè)有次序的數(shù)ρ,θ,z來(lái)確定,其中ρ為點(diǎn)P在xoy平面的投影M與原點(diǎn)的距離,θ為有
向線段PO在xoy平面的投影MO與x軸正向所夾的角。圓柱坐標(biāo)系和三維笛卡爾坐標(biāo)系的點(diǎn)的坐標(biāo)
的對(duì)應(yīng)關(guān)系是,x=ρcosθ,y=ρsinθ,z=z。
3.球面坐標(biāo)系
球面坐標(biāo)系由到原點(diǎn)的距離、方位角、仰角三個(gè)維度構(gòu)成。球面坐標(biāo)(ρ,θ,φ)是球面坐標(biāo)系
上的點(diǎn)的表達(dá)式。設(shè)P(x,y,z)為空間內(nèi)一點(diǎn),則點(diǎn)P也可用這樣三個(gè)有次序的數(shù)r,φ,θ來(lái)確
定,其中r為原點(diǎn)O與點(diǎn)P間的距離,θ為有向線段與z軸正向所夾的角,φ為從正z軸來(lái)看自x軸按
逆時(shí)針?lè)较蜣D(zhuǎn)到有向線段的角,這里M為點(diǎn)P在xOy面上的投影。這樣的三個(gè)數(shù)r,φ,θ叫做點(diǎn)P的
球面坐標(biāo),這里r,φ,θ的變化范圍為r∈[0,+∞),φ∈[0,2π],θ∈[0,π].r=常數(shù),即以原點(diǎn)為心的球
面;θ=常數(shù),即以原點(diǎn)為頂點(diǎn)、z軸為軸的圓錐面;φ=常數(shù),即過(guò)z軸的半平面。其中
x=rsinθcosφy=rsinθsinφz=rcosθ
笛卡爾坐標(biāo)系是直角坐標(biāo)系和斜角坐標(biāo)系的統(tǒng)稱。
相交于原點(diǎn)的兩條數(shù)軸,構(gòu)成了平面仿射坐標(biāo)系。如兩條數(shù)軸上的度量單位相等,則稱此仿射坐標(biāo)系為笛
卡爾坐標(biāo)系。兩條數(shù)軸互相垂直的笛卡爾坐標(biāo)系,稱為笛卡爾直角坐標(biāo)系,否則稱為笛卡爾斜角坐標(biāo)系。
仿射坐標(biāo)系和笛卡爾坐標(biāo)系平面向空間的推廣
相交于原點(diǎn)的三條不共面的數(shù)軸構(gòu)成空間的仿射坐標(biāo)系。三條數(shù)軸上度量單位相等的仿射坐標(biāo)系被稱為空
間笛卡爾坐標(biāo)系。三條數(shù)軸互相垂直的笛卡爾坐標(biāo)系被稱為空間笛卡爾直角坐標(biāo)系,否則被稱為空間笛卡
爾斜角坐標(biāo)系。
笛卡爾坐標(biāo),它表示了點(diǎn)在空間中的位置,和直角坐標(biāo)有區(qū)別,兩種坐標(biāo)可以相互轉(zhuǎn)換。舉個(gè)例子:某個(gè)
點(diǎn)的笛卡爾坐標(biāo)是493,454,967,那它的X軸坐標(biāo)就是4+9+3=16,Y軸坐標(biāo)是4+5+4=13,Z軸坐標(biāo)是
9+6+7=22,因此這個(gè)點(diǎn)的直角坐標(biāo)是(16,13,22),坐標(biāo)值不可能為負(fù)數(shù)(因?yàn)槿齻€(gè)自然數(shù)相加無(wú)法成為負(fù)
數(shù))。
這個(gè)應(yīng)該是了
右手定則
在三維坐標(biāo)系中,Z軸的正軸方向是根據(jù)右手定則確定的。右手定則也決定三維空間中任一坐標(biāo)軸的正旋
轉(zhuǎn)方向。
要標(biāo)注X、Y和Z軸的正軸方向,就將右手背對(duì)著屏幕放置,拇指即指向X軸的正方向。伸出食指和中
指,食指指向Y軸的正方向,中指所指示的方向即是Z軸的正方向
5/16
三維坐標(biāo)系與幾何學(xué)
Microsoft?Direct3D?應(yīng)用程序需要熟悉三維幾何學(xué)原理。本節(jié)介紹創(chuàng)建三維場(chǎng)景所需的最重要的幾
何概念。本節(jié)涉及到以下主題。
這些主題給讀者提供了一個(gè)對(duì)Direct3D應(yīng)用程序所涉及到的基本概念的高層描述。更多有關(guān)這些主題的
信息,請(qǐng)參閱更多的信息。
三維坐標(biāo)系
通常三維圖形應(yīng)用程序使用兩種笛卡爾坐標(biāo)系:左手系和右手系。在這兩種坐標(biāo)系中,正x軸指向右面,
正y軸指向上面。通過(guò)沿正x軸方向到正y軸方向握拳,大姆指的指向就是相應(yīng)坐標(biāo)系統(tǒng)的正z軸的指
向。下圖顯示了這兩種坐標(biāo)系統(tǒng)。
6/16
Microsoft?Direct3D?使用左手坐標(biāo)系。如果正在移植基于右手坐標(biāo)系的應(yīng)用程序,必須將傳給Direct3D
的數(shù)據(jù)做兩點(diǎn)改變。
?顛倒三角形頂點(diǎn)的順序,這樣系統(tǒng)會(huì)從正面以順時(shí)針的方向遍歷它們。換句話說(shuō),如果頂點(diǎn)是
v0,v1,v2,那么以v0,v2,v1的順序傳給Direct3D。
?用觀察矩陣對(duì)世界空間中的z值取反。要做到這一點(diǎn),將表示觀察矩陣的D3DMATRIX結(jié)構(gòu)的_31、
_32、_33和_34成員的符號(hào)取反。
要得到等同于右手系的效果,可以使用D3DXMatrixPerspectiveRH和D3DXMatrixOrthoRH函數(shù)定義投影矩
陣。但是,要小心使用D3DXMatrixLookAtRH函數(shù),并相應(yīng)地顛倒背面剔除的順序及放置立方體貼圖。
雖然左手坐標(biāo)系和右手坐標(biāo)系是最為常用的系統(tǒng),但在三維軟件中還使用許多其它坐標(biāo)系。例如,對(duì)三維
建模應(yīng)用程序而言,使用y軸指向或背向觀察者的坐標(biāo)系統(tǒng)并非罕見(jiàn)。在這種情況下,任意軸(x,y或
z)的正半軸指向觀察者的被定義為右手系。任意軸(x,y或z)的正半軸背向觀察者的被定義為左手
系。如果正在移植一個(gè)基于左手系進(jìn)行建模的應(yīng)用程序,z軸向上,那么除了前面的步驟外,還必須旋轉(zhuǎn)
所有的頂點(diǎn)數(shù)據(jù)(譯注:如果原來(lái)的坐標(biāo)系為正x軸向里,正y軸向左,正z軸向上,那么傳給Direct3D
的頂點(diǎn)的x值對(duì)應(yīng)原來(lái)的y值,y值對(duì)應(yīng)原來(lái)的z值,z值對(duì)應(yīng)原來(lái)的x值,亦即旋轉(zhuǎn)頂點(diǎn)數(shù)據(jù))。
對(duì)三維坐標(biāo)系統(tǒng)中定義的三維物體執(zhí)行的最基本操作是變換、旋轉(zhuǎn)和縮放。可以合并這些基本變換以創(chuàng)建
一個(gè)新的變換矩陣。細(xì)節(jié)請(qǐng)參閱三維變換。
即使合并相同的變換操作,不同的合并順序得到的結(jié)果是不可交換的——矩陣相乘的順序很重要。
三維圖元
三維圖元是組成單個(gè)三維實(shí)體的頂點(diǎn)集合。三維坐標(biāo)系統(tǒng)中最簡(jiǎn)單的圖元是點(diǎn)的集合,稱為點(diǎn)表。
通常三維圖元是多邊形。一個(gè)多邊形是由至少三個(gè)頂點(diǎn)描繪的三維形體。最簡(jiǎn)單的多邊形是三角形。
Microsoft?Direct3D?使用三角形組成大多數(shù)多邊形,因?yàn)槿切蔚娜齻€(gè)頂點(diǎn)一定是共面的。應(yīng)用程序可
以用三角形組合成大而復(fù)雜的多邊形及網(wǎng)格(mesh)。
7/16
下圖顯示了一個(gè)立方體。立方體的每個(gè)面由兩個(gè)三角形組成。整個(gè)三角形的集合構(gòu)成了一個(gè)立方體圖元。
可以將紋理和材質(zhì)應(yīng)用于圖元的表面使它們看起來(lái)像是實(shí)心的。
可以使用三角形創(chuàng)建具有光滑曲面的圖元。下圖顯示了如何用三角形模擬一個(gè)球體。應(yīng)用了材質(zhì)后,渲染
得到的球體看起來(lái)是彎曲的。如果使用高洛德著色,結(jié)果更是如此。更多信息請(qǐng)參閱高洛德著色。
表面和頂點(diǎn)法向量
網(wǎng)格中的每個(gè)面有一個(gè)垂直的法向量。該向量的方向由定義頂點(diǎn)的順序及坐標(biāo)系統(tǒng)是左手系還是右手系決
定。表面法向量從表面上指向正向面那一側(cè),如果把表面水平放置,正向面朝上,背向面朝下,那么表面
法向量為垂直于表面從下方指向上方。在Microsoft?Direct3D?中,只有面的正向是可視的。一個(gè)正向面
是頂點(diǎn)按照順時(shí)針順序定義的面。
8/16
任何不是正向面的面都是背向面。由于Direct3D不總是渲染背向面,因此背向面要被剔除。如果想要渲
染背向面的話,可以改變剔除模式。更多信息請(qǐng)參閱剔除狀態(tài)。
Direct3D在計(jì)算高洛德著色、光照和紋理效果時(shí)使用頂點(diǎn)法向。
Direct3D使用頂點(diǎn)法向計(jì)算光源和表面間的夾角,對(duì)多邊形進(jìn)行高洛德著色。Direct3D計(jì)算每個(gè)頂點(diǎn)的
顏色和亮度值,并對(duì)圖元表面所覆蓋的所有像素點(diǎn)進(jìn)行插值。Direct3D使用夾角計(jì)算光強(qiáng)度,夾角越大,
表面得到的光照就越少。
如果正在創(chuàng)建的物體是平直的,可將頂點(diǎn)法向設(shè)為與表面垂直,如下圖所示。該圖定義了一個(gè)由兩個(gè)三角
形組成的平直表面。
但是,更可能的情況是物體由三角形帶(trianglestrips)組成且三角形不共面。要對(duì)整個(gè)三角形帶的
三角形平滑著色的一個(gè)簡(jiǎn)單方法是首先計(jì)算與頂點(diǎn)相關(guān)聯(lián)的每個(gè)多邊形表面的表面法向量。可以這樣計(jì)算
頂點(diǎn)法向,使頂點(diǎn)法向與頂點(diǎn)所屬的每個(gè)表面的法向的夾角相等。但是,對(duì)復(fù)雜圖元來(lái)說(shuō)這種方法可能不
夠有效。
這種方法如下圖所示。圖中有兩個(gè)表面,S1與S2,它們的鄰邊在上方。S1與S2的法向量用藍(lán)色顯示。頂
點(diǎn)的法向量用紅色顯示。頂點(diǎn)法向量與S1表面法向的夾角和頂點(diǎn)法向量與S2表面法向的夾角相同。當(dāng)對(duì)
這兩個(gè)表面進(jìn)行光照計(jì)算和高洛德著色時(shí),得到結(jié)果是中間的邊被平滑著色,看起來(lái)像是弧形的(而不是
有棱角的)。
9/16
如果頂點(diǎn)法向偏向與它相關(guān)聯(lián)的某個(gè)面,那么會(huì)導(dǎo)致那個(gè)面上的點(diǎn)光強(qiáng)度的增加或減少。下圖顯示了一個(gè)
例子。這些面的鄰邊依然朝上。頂點(diǎn)法向傾向S1,與頂點(diǎn)法向與表面法向有相同的夾角相比,這使頂點(diǎn)法
向與光源間的夾角變小。
10/16
可以用高洛德著色在三維場(chǎng)景中顯示一些有清晰邊緣的物體。要達(dá)到這個(gè)目的,只要在需要產(chǎn)生清晰邊緣
的表面交線處,把表面法向復(fù)制給交線處頂點(diǎn)的法向,如下圖所示。
如果使用DrawPrimitive方法渲染場(chǎng)景,要將有鋒利邊緣的物體定義為三角形表,而非三角形帶。當(dāng)將物
體定義為三角形帶時(shí),Direct3D會(huì)將它作為由多個(gè)三角形組成的單個(gè)多邊形處理。高洛德著色被同時(shí)應(yīng)用
于多邊形每個(gè)表面的內(nèi)部和表面之間。結(jié)果產(chǎn)生表面之間平滑著色的物體。因?yàn)槿切伪碛梢幌盗胁幌噙B
的三角形面組成,所以Direct3D對(duì)多邊形每個(gè)面的內(nèi)部使用高洛德著色。但是,沒(méi)有在表面之間應(yīng)用高
洛德著色。如果三角形表的兩個(gè)或更多的三角形是相鄰的,那么在它們之間看起來(lái)會(huì)有一條鋒利邊緣。
另一種可選的方法是在渲染具有鋒利邊緣的物體時(shí)改變到平面著色模式。這在計(jì)算上是最有效的方法,但
它可能導(dǎo)致場(chǎng)景中的物體不如用高洛德著色渲染的物體真實(shí)。
11/16
三角形光柵化法則
頂點(diǎn)指定的點(diǎn)經(jīng)常不能精確地對(duì)應(yīng)到屏幕上的像素。此時(shí),Microsoft?Direct3D?使用三角形光柵化法則
決定對(duì)于給定三角形使用哪個(gè)像素。
三角形光柵化法則
Direct3D在填充幾何圖形時(shí)使用左上填充約定(top-leftfillingconvention)。這與Microsoft
Windows?的圖形設(shè)備接口(GUI)和OpenGL中的矩形使用的約定相同。Direct3D中,像素的中心是決定
點(diǎn)。如果中心在三角形內(nèi),那么該像素就是三角形的一部分。像素中心用整數(shù)坐標(biāo)表示。
這里描述的Direct3D使用的三角形光柵化法則不一定適用于所有可用的硬件。測(cè)試可以發(fā)現(xiàn)這些法則的
實(shí)現(xiàn)間的細(xì)微變化。
下圖顯示了一個(gè)左上角為(0,0),右下角為(5,5)的矩形。正如大家想象的那樣,此矩形填充25個(gè)
像素。矩形的寬度由right減left定義。高度由bottom減top定義。
在左上填充約定中,上表示水平span在垂直方向上的位置,左表示span中的像素在水平方向上的位置。
一條邊除非是水平的,否則不可能是頂邊——一般來(lái)說(shuō),大多數(shù)三角形只有左邊或右邊。
12/16
左上填充約定確定當(dāng)一個(gè)三角形穿過(guò)像素的中心時(shí)Direct3D采取的動(dòng)作。下圖顯示了兩個(gè)三角形,一個(gè)
在(0,0),(5,0)和(5,5),另一個(gè)在(0,5),(0,0)和(5,5)。在這種情況下第一個(gè)三角
形得到15個(gè)像素(顯示為黑色),而第二個(gè)得到10個(gè)像素(顯示為灰色),因?yàn)楣眠吺堑谝粋€(gè)三角形
的左邊。
如果應(yīng)用程序定義一個(gè)左上角為(0.5,0.5),右下角為(2.5,4.5)的矩形,那么這個(gè)矩形的中心在
(1.5,2.5)。當(dāng)Direct3D光柵化器tesllate這個(gè)矩形時(shí),每個(gè)像素的中心都毫無(wú)異義地分別位于四
個(gè)三角形中,此時(shí)就不需要左上填充約定。下圖顯示了這種情況。矩形內(nèi)的像素根據(jù)在Direct3D中被哪
個(gè)三角形包含做了相應(yīng)的標(biāo)注。
13/16
如果將上例中的矩形移動(dòng),使之左上角為(1.0,1.0),右下角為(3.0,5.0),中心為(2.0,3.0),
那么Direct3D使用左上角填充約定。這個(gè)矩形中大多數(shù)的像素跨越兩個(gè)或更多的三角形的邊界,如下圖
所示。
這兩個(gè)矩形會(huì)影響到相同的像素。
14/16
點(diǎn)、線光柵化法則
點(diǎn)和點(diǎn)精靈一樣,都被渲染為與屏幕邊緣對(duì)齊的四邊形,因此它們使用與多邊形同樣的渲染
法則。
非抗鋸齒線段的渲染法則與GDI使用的法則完全相同。
更多有關(guān)抗鋸齒線段的渲染,請(qǐng)參閱ID3DXLine。
點(diǎn)精靈光柵化法則
對(duì)點(diǎn)精靈和patch圖元的渲染,就好像先把圖元tesllate成三角形,然后將得到的三角形
進(jìn)行光柵化。更多信息,請(qǐng)參閱點(diǎn)精靈。
矩形
貫穿Microsoft?Direct3D?和MicrosoftWindows?編程,都是用術(shù)語(yǔ)包圍矩形來(lái)討論屏幕上的物體。由
于包圍矩形的邊總是與屏幕的邊平行,因此矩形可以用兩個(gè)點(diǎn)描述,左上角和右下角。當(dāng)在屏幕上進(jìn)行位
塊傳輸(Blit=Bitblocktransfer)或命中檢測(cè)時(shí),大多數(shù)應(yīng)用程序使用RECT結(jié)構(gòu)保存包圍矩形的信
息。
C++中,RECT結(jié)構(gòu)有如下定義。
typedefstructtagRECT{
LONGleft;//這是左上角的x坐標(biāo)。
15/16
LONGtop;//這是左上角的y坐標(biāo)。
LONGright;//這是右下角的x坐標(biāo)。
LONGbottom;//這是右下角的y坐標(biāo)。
}RECT,*PRECT,NEAR*NPRECT,FAR*LPRECT;
在上例中,left和top成員是包圍矩形左上角的x-和y-坐標(biāo)。類似地,right和bottom成員組成右下角
的坐標(biāo)。下圖直觀地顯示了這些值。
為了效率、一致性及易用性,Direct3D所有的prentation函數(shù)都使用矩形。
三角形插值對(duì)象(interpolants)
在渲染時(shí),流水線會(huì)貫穿每個(gè)三角形的表面進(jìn)行頂點(diǎn)數(shù)據(jù)插值。有五種可能的數(shù)據(jù)類型可以進(jìn)行插值。頂
點(diǎn)數(shù)據(jù)可以是各種類型的數(shù)據(jù),包括(但不限于):漫反射色、鏡面反射色、漫反射阿爾法(三角形透明
度)、鏡面反射阿爾法、霧因子(固定功能流水線從鏡面反射的阿爾法分量中取得,可編程頂點(diǎn)流水線則
從霧寄存器中取得)。頂點(diǎn)數(shù)據(jù)通過(guò)頂點(diǎn)聲明定義。
對(duì)一些頂點(diǎn)數(shù)據(jù)的插值取決于當(dāng)前的著色模式,如下表所示。
著色模式描述
平面
在平面著色模式下只對(duì)霧因子進(jìn)行插值。對(duì)所有其它的插值對(duì)象,整個(gè)面都使
用三角形第一個(gè)頂點(diǎn)的顏色。
高洛德在所有三個(gè)頂點(diǎn)間進(jìn)行線性插值。
根據(jù)不同的顏色模型,對(duì)漫反射色和鏡面反射色的處理是不同的。在RGB顏色模型中,系統(tǒng)在插值時(shí)使用
紅、綠和藍(lán)顏色分量。
顏色的阿爾法成員作為單獨(dú)的插值對(duì)象對(duì)待,因?yàn)樵O(shè)備驅(qū)動(dòng)程序可以以兩種不同的方法實(shí)現(xiàn)透明:使用紋
理混合或使用點(diǎn)畫法(stippling)。
16/16
可以用D3DCAPS9結(jié)構(gòu)的ShadeCaps成員確定設(shè)備驅(qū)動(dòng)程序支持何種插值。
向量、頂點(diǎn)和四元數(shù)
貫穿Microsoft?Direct3D?,頂點(diǎn)用于描述位置和方向。圖元中的每個(gè)頂點(diǎn)由指定其位置的向量、顏色、
紋理坐標(biāo)和指定其方向的法向量描述。
四元數(shù)給三元素向量的[x,y,z]值增加了第四個(gè)元素。用于三維旋轉(zhuǎn)的方法,除了典型的矩陣以外,四
元數(shù)是另一種選擇。四元數(shù)表示三維空間中的一根軸及圍繞該軸的一個(gè)旋轉(zhuǎn)。例如,一個(gè)四元數(shù)可能表示
軸(1,1,2)和1度的旋轉(zhuǎn)。四元數(shù)包含了有價(jià)值的信息,但它們真正的威力源自可對(duì)它們執(zhí)行的兩種操
作:合成和插值。
對(duì)四元數(shù)進(jìn)行插值與合成它們類似。兩個(gè)四元數(shù)的合成如下表示:
21
qqQ??
將兩個(gè)四元數(shù)的合成應(yīng)用于幾何體意味著“把幾何體繞axis2軸旋轉(zhuǎn)rotation2角度,然后繞axis1軸旋轉(zhuǎn)
rotation1角度”。在這種情況下,Q表示繞單根軸的旋轉(zhuǎn),該旋轉(zhuǎn)是先后將q2和q1應(yīng)用于幾何體的結(jié)
果。
使用四元數(shù),應(yīng)用程序可以計(jì)算出一條從一根軸和一個(gè)方向到另一根軸和另一個(gè)方向的平滑、合理的路
徑。因此,在q1和q2間插值提供了一個(gè)從一個(gè)方向變化到另一個(gè)方向的簡(jiǎn)單方法。
當(dāng)同時(shí)使用合成與插值時(shí),四元數(shù)提供了一個(gè)看似復(fù)雜而實(shí)際簡(jiǎn)單的操作幾何體的方法。例如,設(shè)想我們
希望把一個(gè)幾何體旋轉(zhuǎn)到某個(gè)給定方向。我們已經(jīng)知道希望將它繞axis2軸旋轉(zhuǎn)r2度,然后繞axis1軸旋
轉(zhuǎn)r1度,但是我們不知道最終的四元數(shù)。通過(guò)使用合成,我們可以在幾何體上合成兩個(gè)旋轉(zhuǎn)并得到最終單
個(gè)的四元數(shù)。然后,我們可以在原始四元數(shù)和合成的四元數(shù)間進(jìn)行插值,得到兩者之間的平滑轉(zhuǎn)換。
Direct3D擴(kuò)展(D3DX)工具庫(kù)包含了幫助用戶使用四元數(shù)的函數(shù)。例如,D3DXQuaternionRotationAxis
函數(shù)給一個(gè)定義旋轉(zhuǎn)軸的向量增加一個(gè)旋轉(zhuǎn)值,并在由D3DXQUTERNION結(jié)構(gòu)定義的四元數(shù)中返回結(jié)果。另
外,D3DXQuaternionMultiply函數(shù)合成四元數(shù),D3DXQuaternionSlerp函數(shù)在兩個(gè)四元數(shù)間進(jìn)行球面線性
插值(sphericallinearinterpolation)。
Direct3D應(yīng)用程序可以使用下列函數(shù)簡(jiǎn)化對(duì)四元數(shù)的使用。
Direct3D應(yīng)用程序可以使用下列函數(shù)簡(jiǎn)化對(duì)三成員向量的使用。
D3DX工具庫(kù)提供的數(shù)學(xué)函數(shù)中包含了許多輔助函數(shù),可以簡(jiǎn)化對(duì)二成員和四成員向量的使用。
本文發(fā)布于:2023-03-11 00:34:11,感謝您對(duì)本站的認(rèn)可!
本文鏈接:http://www.newhan.cn/zhishi/a/1678466051135822.html
版權(quán)聲明:本站內(nèi)容均來(lái)自互聯(lián)網(wǎng),僅供演示用,請(qǐng)勿用于商業(yè)和其他非法用途。如果侵犯了您的權(quán)益請(qǐng)與我們聯(lián)系,我們將在24小時(shí)內(nèi)刪除。
本文word下載地址:用戶坐標(biāo)系.doc
本文 PDF 下載地址:用戶坐標(biāo)系.pdf
| 留言與評(píng)論(共有 0 條評(píng)論) |