关注知识点:框架
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 使之能够控制。