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

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

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

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

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

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

 

網(wǎng)友評(píng)論