Silverlight 参考:三维效果(透视转换) -- MSN
?
您可以使用"透視轉換"來將三維效果應用于任何 Silverlight UIElement。例如,您可以制造這樣一個假象,即對象朝向您或遠離您進行旋轉,如下圖中所示。
使用透視轉換的圖像
盡管上圖中顯示了應用于一個簡單圖像的透視轉換,但您可以將透視轉換應用于 UIElement,包括控件。例如,您可以將該效果應用于 Grid,而后者又包含 TextBox 和 Button。盡管旋轉這些控件,但用戶可以在 TextBox 中鍵入內容并單擊 Button(假定這些控件可見)。
使用透視轉換的另一個常見情形是相對于彼此對對象進行排列,以便創建三維效果,如下圖中所示。
堆疊對象以創建三維效果
除了創建靜態的三維效果外,還可以對透視轉換屬性進行動畫處理,以便創建移動的三維效果。
說明
透視轉換與三維引擎不等效;但是,它們都可用于使得二維 Silverlight 內容就像是在三維平面上繪制的一樣。
在三維平面上旋轉對象
若要將某一屬性轉換應用于 UIElement,請將 Projection 對象的 UIElement 屬性設置為 PlaneProjection。PlaneProjection 定義轉換在空間中呈現的方式。下面的示例顯示了一個簡單的情況。
?
?
代碼 <StackPanel?Margin="35"?Background="Gray">????<StackPanel.Projection>
????????<PlaneProjection?RotationX="-35"?RotationY="-35"?RotationZ="15"??/>
????</StackPanel.Projection>
????<TextBlock?Margin="10">Type?Something?Below</TextBlock>
????<TextBox?Margin="10"></TextBox>
????<Button?Margin="10"?Content="Click"?Width="100"?/>
</StackPanel>
?
?
在上例中,RotationX、RotationY 和 RotationZ 屬性指定圍繞一個軸旋轉 StackPanel 的度數。例如,RotationX 屬性指定圍繞對象的水平軸旋轉。下圖演示了 RotationX 屬性如何圍繞 x 軸旋轉一個對象。
RotateX = "-35"在該圖中,還要注意 y 軸和 z 軸是如何顯示的。所有這三個軸相交的點稱作旋轉中心。
RotationY 屬性圍繞旋轉中心的 y 軸旋轉。
RotateY = "-35"RotationZ 屬性圍繞旋轉中心的 z 軸(直接穿過對象平面的直線)旋轉。
RotateZ = "-45"這些旋轉屬性可以指定負值,這會以反方向將對象旋轉某一度數。此外,絕對數可以大于 360,這會使對象旋轉的度數超過一個完整旋轉(即 360 度)。在下面的示例中,您可以為 RotationX、RotationY 和 RotationZ 屬性試驗不同值,以便看看效果。
運行此示例
您可以通過使用 CenterOfRotationX、CenterOfRotationY 和 CenterOfRotationZ 屬性,移動旋轉中心。默認情況下,旋轉軸直接穿過對象的中心,這導致對象圍繞其中心旋轉;但是,如果您將旋轉的中心移到對象的外邊緣,對象將圍繞該外邊緣旋轉。CenterOfRotationX 和 CenterOfRotationY 的默認值是 0.5,CenterOfRotationZ 的默認值是 0。對于 CenterOfRotationX 和 CenterOfRotationY,0 和 1 之間的值會將軸線設置在對象內的某個位置。值為 0 表示一個對象邊緣,值為 1 表示對側邊緣。允許此范圍外的值,并且將相應移動旋轉中心。因為旋轉中心的 z 軸繪制穿過對象的平面,所以,
CenterOfRotationX 沿著與該對象平行的 x 軸移動旋轉中心,而 CenterOfRotationY 沿著該對象的 y 軸移動旋轉中心。下圖演示將不同的值用于 CenterOfRotationY。
CenterOfRotationY = "0.5"(默認值)
CenterOfRotationY = "0.1"(上邊緣)
請注意在 CenterOfRotationY 屬性設置為默認值 0.5 時圖像是如何圍繞中心旋轉的,以及在設置為 0.1 時是如何靠近上邊緣旋轉的。在更改 CenterOfRotationX 屬性以便移動 RotationY 屬性旋轉對象的位置時,您會看到相似的行為。
CenterOfRotationX = "0.5"(默認值)
CenterOfRotationX = "0.9"(右側邊緣)
使用下面的滑塊示例試驗圍繞旋轉中心的不同位置旋轉對象的結果。
?
定位對象
到此為止,您已學習了如何在空間中旋轉對象。此外,您可以通過使用以下屬性,相對于這些旋轉的對象彼此的位置在空間中定位它們:
-
LocalOffsetX 沿旋轉對象平面的 x 軸平移對象。
-
LocalOffsetY 沿旋轉對象平面的 y 軸平移對象。
-
LocalOffsetZ 沿旋轉對象平面的 z 軸平移對象。
-
GlobalOffsetX 沿屏幕對齊的 x 軸平移對象。
-
GlobalOffsetY 沿屏幕對齊的 y 軸平移對象。
-
GlobalOffsetZ 沿屏幕對齊的 z 軸平移對象。
本地偏移量
LocalOffsetX、LocalOffsetY 和 LocalOffsetZ 屬性在對象已旋轉后沿對象平面的相應軸平移對象。因此,對象的旋轉確定對象平移的方向。為了演示此概念,下面的示例將 LocalOffsetX 動畫處理為從 0 到 400,并且將 RotationY 動畫處理為從 0 到 65 度。
?
全局偏移量
GlobalOffsetX、GlobalOffsetY 和 GlobalOffsetZ 屬性相對于屏幕沿軸平移對象。也就是說,與本地偏移量屬性不同,對象沿其移動的軸與應用于該對象的任何旋轉無關。當您只是想沿著屏幕的 x、y 或 z 軸移動對象,而不擔心應用于對象的旋轉時,這些屬性很有用。
?
Matrix3DProjection 和 Matrix3D
您可以將 Matrix3DProjection 和 Matrix3D 類型用于比使用 PlaneProjection 可能更復雜的準三維方案。Matrix3DProjection 向您提供一個完整的三維轉換矩陣以應用于任何 UIElement,這樣能夠將任意模型轉換矩陣和透視矩陣應用于 Silverlight 元素。請記住,這些 API 是最簡化的形式,因此,如果您使用它們,將需要編寫正確創建三維轉換矩陣的代碼。因此,將 PlaneProjection 用于簡單的三維方案更容易。
?
?
?
轉載于:https://www.cnblogs.com/Dlonghow/archive/2010/03/12/1683910.html
總結
以上是生活随笔為你收集整理的Silverlight 参考:三维效果(透视转换) -- MSN的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 完成公司核名
- 下一篇: c#与WMI使用技巧集