WPF 部分支持三維模型,為啥說是部分支持?畢竟 WPF 的側(cè)重點(diǎn)還是在應(yīng)用開發(fā)上,雖然也有些游戲是用 WPF 開發(fā)的,不過,老周想啊,如果真要開發(fā)游戲,最好用專門的框架,WPF 應(yīng)當(dāng)用于開發(fā)應(yīng)用功能的。不過,動(dòng)畫、三維建模這些支持可以作為輔助,尤其是在 UI 上,適當(dāng)?shù)兀梢栽鰪?qiáng)一下。當(dāng)然,不要為了裝逼,弄得不倫不類的,那樣就是主次不分了,現(xiàn)在有不少軟件就是主次不分的。

在 WPF 中,要呈現(xiàn)三維模型,需要用到 Viewport3D ,它是三維對象的總?cè)萜?,所有三維對象都應(yīng)該放在這個(gè)容器中。本文老周不介紹三維對象的樹結(jié)構(gòu),而是重點(diǎn)說說 Viewport3D 的一個(gè)重要配件——照相機(jī)。

其實(shí),這個(gè)“照相機(jī)”,與我們現(xiàn)實(shí)世界中的照相機(jī)差不多,它是我們觀察三維模型的一個(gè)入口,就好比我們從真實(shí)相機(jī)中的取景器去觀察被攝對象一樣,由于相機(jī)的視角廣度有限(哪怕是廣角鏡頭也是有限的),現(xiàn)實(shí)的被攝物體可以無限延展,但是,你在取景器中看到的只能是局部。道理也是一樣的,在 WPF 的三維模型中,Camara 只是設(shè)定我們能看到三維對象的局部,而維對象本身也可能是無限延展的。

Viewport3D 對象有個(gè) Camera 屬性,用來設(shè)置一個(gè)合適的相機(jī)實(shí)例。照相機(jī)可以分為兩大類:

第一類,MatrixCamera,它通過一個(gè)矩陣來描述照相機(jī)的參數(shù),這個(gè)估計(jì)用得不多,因?yàn)橥?fù)雜的,反正老周是不知道怎么用的。

第二類,ProjectionCamera,即帶投影透視效果的照相機(jī),它派生出兩款相機(jī),注意啊,不是佳能和尼康,是 PerspectiveCamera 和 OrthographicCamera。PerspectiveCamera相機(jī)比較好解,因?yàn)樗菐敢曅Ч?,這也符合我們靈長目類動(dòng)物的視覺特征——離得近的物體看起來會(huì)大一些,離得遠(yuǎn)的物體會(huì)小一些,當(dāng)然了,前提是物體大小接近,不然,這太陽比月球大太多了,所以,哪怕太陽離我們更遠(yuǎn),看起來也比月亮大。而 OrthographicCamera 呢,它不太符合咱們靈長目動(dòng)物的視覺特征,因?yàn)槭褂眠@個(gè)照相機(jī)后,所視物體就變成了正交,即不存在透視效果,沒有距離之別,不管遠(yuǎn)的還是近的,都一樣大。人要是能做到像正交鏡頭這樣就好了,不管親疏都一視同仁。有時(shí)候,人真的還不如代碼友好,因?yàn)橛行┤藭?huì)算計(jì)你,但代碼不會(huì),雖然有時(shí)候,代碼會(huì)耍性子,讓你又愛又恨,但是,它待你是真誠的,而人呢,也許只有少部分人能做得到,社會(huì)太缺誠信。

 

延伸閱讀

學(xué)習(xí)是年輕人改變自己的最好方式-Java培訓(xùn),做最負(fù)責(zé)任的教育,學(xué)習(xí)改變命運(yùn),軟件學(xué)習(xí),再就業(yè),大學(xué)生如何就業(yè),幫大學(xué)生找到好工作,lphotoshop培訓(xùn),電腦培訓(xùn),電腦維修培訓(xùn),移動(dòng)軟件開發(fā)培訓(xùn),網(wǎng)站設(shè)計(jì)培訓(xùn),網(wǎng)站建設(shè)培訓(xùn)學(xué)習(xí)是年輕人改變自己的最好方式