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