關注知識點:框架
1、剪切ClipToBounds="True"的改動實現效果
以上設置不剪切邊界,並設置鏡頭位置Position="1,0.5,6"右移,則視野裏3D模型會偏左移出邊界。
2、ViewBox包含Viewport3D佈局佈局
- 內容裝飾器ViewBox包含惟一Child的UIElement元素,而Viewport3D繼承FrameworkElement,符合要求,ViewBox.Stretch屬性已設置子內容適用父空間方式
- 另當Viewport3D爲佈局元素(如 Canvas)的內容包含時,可經過設置其 Height 和 Width 屬性(繼承自 FrameworkElement)來指定 Viewport3D 的大小。
3、3D旋轉的選擇方式動畫
- RotateTransform3D類除了設置繞座標旋轉,還能夠另外設置RotateTransform3D.Rotation的Rotation3D值。Rotation3D繼承動畫抽象類Animatable,子類有繞軸旋轉AxisAngleRotation3D和四元旋轉QuaternionRotation3D (高深吧,不在此討論範圍,見http://blog.csdn.net/candycat...)
4、3D基本模型怎麼組裝及顯示出三維畫面?this
- 使用Viewport3D元素的二維佈局範圍內呈現包含的三維內容,其屬性有攝像頭Camera及Children(三維抽象類Visual3D子級的集合)
- 繼承Visual3D的爲 主要呈現三維模型Model3D 對象的 類:ModelVisual3D 、在指定的三維視區邊界內呈現二維子對象:Viewport2DVisual3D、抽象三維元素的基類UIElement。
- 而三維模型Model3D 子類有 使用指定的 Material 呈現 Geometry3D的:GeometryModel3D、應用到三維場景的照明的:Light基類(包含AmbientLight/DirectionalLight/PointLightBase)、容許使用許多 三維 模型做爲一個單元的:Model3DGroup(示例用的)。
- 抽象基類三維幾何Geometry3D類 的子類只有三維三角形基元MeshGeometry3D(示例用的)。
- 經過以上的元素就這樣簡單組合三維體:使用MeshGeometry3D和material組成一個GometryModel3D的三維幾何模型,接下來其或光源Light做爲基礎三維模型賦值到一個三維可視模型ModelVisual3D單元的內容屬性上,接下來可以使用多個單元ModelVisual3D組合成一個大的場景ModelVisual3D。例如,使用 Model3D 對象來構建一輛汽車的模型;並使用十個 ModelVisual3D 對象在您的場景中放置十輛汽車。
- 以上的場景ModelVisual3D與攝像頭Camera組成Viewport3D顯示出來。若有三維變換可在ModelVisual3D的Transform屬性上設置。
5、滑塊值改變事件驅動及演示版動畫值的參數更新spa
- 整個示例畫面更新是由滑塊值改變事件驅動的,具體改變哪些元素見代碼。
- 須要注意的是每次滑塊值變更就獲取當前頁面下演示版動畫時鐘當前值ExampleStoryboard.GetCurrentTime(),從新啓動Storyboard.Begin()的演示版中的動畫,並從新定位操做Storyboard.Seek() 。
- 此處對立方體ModelVisual3D的移動變換中OffsetX值 進行幀動畫,在滑塊值變化後再次對幀動畫中的幀控制點從新賦值,並進行動畫時鐘更新。
6、立方體X軸移動值的幀動畫觸發設置問題。.net
-
爲何要在頁面觸發?orm
- 做爲頁面下同一演示板的一個幀動畫,方便隨 動畫時鐘一塊兒更新重定位。
- 其實也能夠把幀動畫移到在Viewport元素下演示板中觸發,不過須要在滑塊值改變事件中單獨定義此演示板時鐘從新進行KeySpline的控制點參數定位。(見代碼我後臺註釋部分)。
-
對演示板時鐘操做留意項對象
- Storyboard.Seek 方法 (FrameworkElement, TimeSpan, TimeSeekOrigin):將此 Storyboard 定位到指定的位置。 Storyboard 在時鐘下一次走動時執行請求的定位操做。
- 此方法將演示圖板時鐘的 CurrentState 更改成 Active。 在下次處理計時週期以前,此方法不會對計時樹產生任何影響。 在此以前也不會引起相應的事件,這是其反作用。
- 若要以交互方式控制此演示圖板,在調用交互方法時所使用的 containingObject 參數必須與在啓動演示圖板的框架元素(此處爲ExampleStoryboard.Begin(this, true);)時使用的相應參數相同。(另外改變立方體觸發代碼位置時都須要設置BeginStoryBoard的Name值,不然報錯,詳細見後臺註釋代碼,注意哪一個故事板Storyboar.Begin(哪一個BeginStoryBoard.Name))
- 若是使可控演示圖板能夠控制,則能夠對它執行暫停、繼續、定位、中止和移除操做。 若要使演示圖板在代碼中能夠控制,必須使用該演示圖板的 Begin 方法的適當重載並指定 true 使之能夠控制。