標(biāo)簽: 雜談 |
WPF中可以創(chuàng)建三維幾何圖形,支持3D對象的應(yīng)用,支持從3D Max等軟件將3D文件obj導(dǎo)入設(shè)計中,但是目前還不支持將材質(zhì)同時導(dǎo)入,這樣需要在WPF中對3D對象重新設(shè)置顏色或貼圖。
2.10.1 WPF中的三維空間
1.三維空間坐標(biāo)
WPF中二維圖形的坐標(biāo)系原點定位在呈現(xiàn)區(qū)域(屏幕)的左上角,其X 軸上的正方向朝右,Y軸的正向朝下。 在WPF的三維坐標(biāo)系中,原點一般位于在WPF中創(chuàng)建的三維對象的中心(導(dǎo)入的三維對象的情況就不一定了,比如從3DMax中導(dǎo)入的obj文件),三維坐標(biāo)的X 軸正方向朝右,Y軸的正方向朝上,Z軸的正方向從原點向外朝向觀察者。
圖2-191三維空間坐標(biāo)
圖2-191給出了WPF三維空間坐標(biāo)系(X:紅色,Y:綠色,Z:藍(lán)色),兩個坐標(biāo)軸之間的弧線表示可以旋轉(zhuǎn),其中:
Y-Z之間的弧線(紅色)表示可以圍繞X軸旋轉(zhuǎn);
X-Z之間的弧線(綠色)表示可以圍繞Y軸旋轉(zhuǎn);
X-Y之間的弧線(藍(lán)色)表示可以圍繞Z軸旋轉(zhuǎn)。
2.照相機及典型位置
照相機是觀察者觀察三維對象形態(tài)和位置的工具,照相機的位置坐標(biāo)及與對象的距離直接影響到三維對象的呈現(xiàn)。WPF中的相機有正交相機(OrthographicCamera)和透視(遠(yuǎn)景)相機(PerspectiveCamera)兩類,從觀察者的角度來說前者對觀察對象沒有透視感,遠(yuǎn)近都一樣。后者的工作原理與普通照相機鏡頭類似,對象離照相機越遠(yuǎn),看起來就越小,觀察到的對象則有遠(yuǎn)小近大的效果。
照相機的位置坐標(biāo)是可以變化的,一個典型的透視相機位置設(shè)置如圖2-192所示。
圖2-192典型的透視相機位置設(shè)置
圖2-192中,當(dāng)相機位置靠近Z軸中心時,即Z坐標(biāo)值變小,觀察到的對象變大,當(dāng)相機位置遠(yuǎn)離Z軸中心時,即Z坐標(biāo)值變大,觀察到的對象變小。
照相機的位置就是觀察者的位置,相機的位置可以任意設(shè)置,這樣觀察到的三維對象的“形象”就會發(fā)生變化,在三維場景中正確設(shè)置相機位置很重要,圖2-192是一個典型設(shè)置。
3.材料
三維對象使用的材料分三類:
漫射材料:確定三維對象在直射光(白光)照射下的顏色,其作用就如同墻面噴漆一樣。
放射材料:使對象產(chǎn)生發(fā)光效果。光的顏色由材料的顏色決定。
反射材料:控制三維對象上高光反射區(qū)域的顏色。高光反射區(qū)域指在金屬鉻等光滑亮澤表面上看到的光亮區(qū)域。
4.光的分類
(1)環(huán)境光:環(huán)境光將光投向各個方向,使所有對象均勻受光。如果只用環(huán)境光,則
對象可能會顯得褪色,而且顏色單一。為了獲得最佳效果,需要使用其他光。如圖2-193左一圖。
(2)投射光:投射光所投射的光如同聚光燈一般,光從發(fā)光位置發(fā)出,并在錐形區(qū)域內(nèi)傳播。投射光不會影響到位于錐形發(fā)光區(qū)域以外的那部分三維對象。如圖2-193左二圖。
(3)定向光:定向光沿著特定的方向均勻平行投射,就像太陽光一樣。如圖2-193左三圖。
(4)點光:點光從一個點向所有方向投射光,就像普通的燈泡一樣。如圖2-193右圖。
2.10.2 WPF三維空間的元素
Expression Blend中提供了Viewport3D控件,這是三維對象元素的上層容器,是相機對象元素Camera、三維圖形呈現(xiàn)對象元素ModelVisual3D的集合。添加obj對象到【設(shè)計面板】后就自動建立了1個Viewport3D控件,在【對象和時間線】面板中可以看到,其中包含下列屬性設(shè)置:
(1) Camera:相機,可以在【屬性】面板選擇以下屬性設(shè)置:
相機類型:遠(yuǎn)景相機、正交相機及有關(guān)參數(shù);
Position:照相機在三維空間中的位置;
Direction:照相機在三維空間中的拍攝方向;
UP Vector:正向矢量,指定此照相機的“上方”所指的方向。
Perspective Field ofView:透視視野,僅適用于遠(yuǎn)景相機,較小的數(shù)值會減少對象因遠(yuǎn)景拍攝而變形的程度。較大的數(shù)值會像使用魚眼鏡頭一樣導(dǎo)致對象大幅變形。
Near Clipping Plane/Far Clipping Plane:近點/遠(yuǎn)點剪切平面,可控制對象與照相機之間的最近或最遠(yuǎn)距離,超出上述距離的對象將從所呈現(xiàn)的視圖中消失。
(2)AmbientLight:環(huán)境光色彩設(shè)置,可以在上述的光類型中選擇需要的光源。
(3)DirectionLight:定向光色彩設(shè)置,可以在上述的光類型中選擇需要的光源。
(4)DefaultMaterial:材質(zhì)設(shè)置,可以在前面介紹的材料類型中選擇,可以選擇圖形刷資源。
2.ModelVisual3D元素
三維元素ModelVisual3D可以再包含多個ModelVisual3D子元素,比如燈光,三維造型。
3.GeometryModel3D元素
GeometryModel3D是ModelVisual3D子元素內(nèi)的三維造型元素,材質(zhì)是其屬性,而三維圖形構(gòu)建又由最底層網(wǎng)格元素MeshGeometry3D完成。
4.MeshGeometry3D元素
這是1個若干3D點(Point3D)的集合,每3個3D點按一定環(huán)繞方向組成1個三角形,WPF采用逆時針的環(huán)繞方向,符合所謂“右手法則”,即垂直豎起右手的大拇指,彎曲其余4指,其余4指指向正是三角形的環(huán)繞方向,大拇指的指向是三角形的正面,反向是其背面,如圖2-194所示,正是這些三角形構(gòu)成了WPF中的三維造型世界。
圖2-195是【對象和時間線】面板呈現(xiàn)的1個三維對象元素的列表,可以看出上面所說的三維元素之間的關(guān)系。
圖2-195中有1個Viewport3D控件,其中有1個Camera元素,1個名為“World”的三維元素ModelVisual3D,這是多個ModelVisual3D元素的集合,“AmbientLightContainer”、“DirectionalLightContaine