小男孩‘自慰网亚洲一区二区,亚洲一级在线播放毛片,亚洲中文字幕av每天更新,黄aⅴ永久免费无码,91成人午夜在线精品,色网站免费在线观看,亚洲欧洲wwwww在线观看

分享

WPF的三維變換應(yīng)用(4)

 xyjackxjw 2013-05-09

WPF的三維變換應(yīng)用(4)

2008-08-27 18:26 佚名 MSDN 我要評論(0) 字號:T | T
一鍵收藏,隨時查看,分享好友!

本主題描述如何向 Windows Presentation Foundation (WPF) 圖形系統(tǒng)中的三維模型應(yīng)用變換。開發(fā)人員可以借助于變換功能來對模型進行重定位、調(diào)整大小和重定向,而無需更改用來定義模型的基值。

AD: 2013大數(shù)據(jù)全球技術(shù)峰會低價搶票中

注意:Windows Presentation Foundation (WPF) 三維是一個右手系統(tǒng),這意味著,如果旋轉(zhuǎn)角度為正數(shù),則將圍繞該軸逆時針旋轉(zhuǎn)。

對于指定了軸和角度的旋轉(zhuǎn)來說,如果沒有為 RotateTransform3D 上的 CenterX、CenterY 和 CenterZ 屬性指定值,則假設(shè)圍繞原點旋轉(zhuǎn)。與縮放時一樣,一定要記住旋轉(zhuǎn)時會變換模型的整個坐標(biāo)空間。如果模型不是圍繞原點創(chuàng)建的,或者它以前經(jīng)過平移,則旋轉(zhuǎn)可能會圍繞原點“轉(zhuǎn)動”,而不是就地旋轉(zhuǎn)。

在指定了新中心的情況下旋轉(zhuǎn)


若要“就地”旋轉(zhuǎn)模型,請將模型的實際中心指定為旋轉(zhuǎn)中心。由于幾何形狀通常是圍繞原點建模的,因此,在依次執(zhí)行下列操作時通常將獲取一組預(yù)期的變換結(jié)果:調(diào)整模型大小(縮放該模型),然后設(shè)置模型方向(旋轉(zhuǎn)該模型),最后將模型移到所需的位置(平移該模型)。

旋轉(zhuǎn)示例


指定了軸和角度的旋轉(zhuǎn)非常適于靜態(tài)變換和某些動畫。但是,請考慮圍繞 X 軸將立方體模型旋轉(zhuǎn) 60 度,然后圍繞 Z 軸將其旋轉(zhuǎn) 45 度。您可以將這種變換描述為兩個離散的仿射變換,也可以將其描述為一個矩陣。但是,對于按照這種方式定義的旋轉(zhuǎn),可能很難平滑地進行動畫處理。盡管按照這兩種方法計算的模型起始位置和結(jié)束位置相同,但是,從計算的角度來看,該模型經(jīng)過的中間位置是不確定的。四元數(shù)提供了一種用來在旋轉(zhuǎn)的起始位置和結(jié)束位置之間計算內(nèi)插值的替代方法。

四元數(shù)表示三維空間中的一個軸以及圍繞該軸的旋轉(zhuǎn)。例如,四元數(shù)可以表示 (1,1,2) 軸以及 50 度的旋轉(zhuǎn)角度。四元數(shù)在定義旋轉(zhuǎn)方面的價值在于可以針對它們執(zhí)行的兩個運算:合成和內(nèi)插。應(yīng)用于一個幾何形狀的兩個四元數(shù)的合成是指“圍繞 axis2 將幾何形狀旋轉(zhuǎn) rotation2 度,然后圍繞 axis1 將其旋轉(zhuǎn) rotation1 度”。通過使用合成運算,可以將應(yīng)用于幾何形狀的兩個旋轉(zhuǎn)合成在一起,以便獲得一個代表合成結(jié)果的四元數(shù)。由于四元數(shù)內(nèi)插可以計算出從一個軸和方向到另一個軸和方向的平滑而又合理的路徑,因此您可以從原始位置到合成的四元數(shù)之間進行內(nèi)插,以便實現(xiàn)從一個位置到另一個位置的平滑過渡,從而可以對該變換進行動畫處理。對于要進行動畫處理的模型,可以通過針對 Rotation 屬性使用 QuaternionRotation3D 來為旋轉(zhuǎn)指定目標(biāo) Quaternion。

使用變換集合
在生成場景時,通常會向模型應(yīng)用多個變換。向 Transform3DGroup 類的 Children 集合中添加變換,從而方便地將多個變換組合在一起以應(yīng)用于場景中的各種模型。通常,可以很方便地在幾個不同的組中重用某個變換,這與通過向每個實例應(yīng)用一組不同的變換來重用模型大體相同。請注意,將變換添加到該集合中的順序至關(guān)重要:集合中的變換是按照從第一個到最后一個的順序應(yīng)用的。

對變換進行動畫處理
Windows Presentation Foundation (WPF) 三維實現(xiàn)與二維圖形參與同一個計時和動畫系統(tǒng)。換言之,若要對三維場景進行動畫處理,需要對其模型的屬性進行動畫處理。可以直接對基元的屬性進行動畫處理,但是通常很容易對用來更改模型位置或外觀的變換進行動畫處理。由于可以向 Model3DGroup 對象及其各個模型應(yīng)用變換,因此可以向 Model3DGroup 的子級應(yīng)用一組動畫,向一組對象應(yīng)用另一組動畫。

若要對 Windows Presentation Foundation (WPF) 中的對象進行動畫處理,可以創(chuàng)建時間線、定義動畫(實際上是隨著時間的推移而更改某個屬性值)并指定要向其應(yīng)用動畫的屬性。此屬性必須是 FrameworkElement 的屬性。由于三維場景中的所有對象都是 Viewport3D 的子級,因此要應(yīng)用于場景的任何動畫所面向的屬性都是 Viewport3D 屬性的屬性。一定要仔細設(shè)計動畫的屬性路徑,因為語法可能會極為冗長。

假設(shè)您希望就地旋轉(zhuǎn)某個對象,而且還希望應(yīng)用擺動動作以公開要查看的對象的更多內(nèi)容。您可以選擇向模型應(yīng)用 RotateTransform3D,并對模型從一個向量旋轉(zhuǎn)到另一個向量時所圍繞的軸進行動畫處理。下面的代碼示例演示如何將 Vector3DAnimation 應(yīng)用于該變換的 Rotation3D 的 Axis 屬性,并假設(shè) RotateTransform3D 是應(yīng)用于具有 TransformGroup 的模型的幾個變換之一。

 

 

使用類似的語法可以將其他變換屬性作為目標(biāo)來移動或縮放該對象。 例如,可以在進行縮放變換時將 Point3DAnimation 應(yīng)用于 ScaleCenter 屬性,以便使模型的形狀平滑地扭曲。

盡管上面的幾個示例對 GeometryModel3D 的屬性進行變換,但是還可以對場景中其他模型的屬性進行變換。 例如,可以通過對應(yīng)用于 Light 對象的平移進行動畫處理來創(chuàng)建移動燈光和陰影效果,這些效果可以顯著改變模型的外觀。

由于照相機也是模型,因此也可以對照相機的屬性進行變換。 盡管您確實可以通過改變照相機的位置或平面距離來改變場景的外觀(實際上是變換整個場景的投影),但應(yīng)注意,對于觀察者來說,以這種方法實現(xiàn)的許多效果不如將變換應(yīng)用于場景中模型的地點或位置更有“視覺意義”。

    本站是提供個人知識管理的網(wǎng)絡(luò)存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊一鍵舉報。
    轉(zhuǎn)藏 分享 獻花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多