MSDN 教程短片 WPF 23(3D动画)

这是WPF最后一节,3D动画,用一个字来描述它“炫”,今天我们来揭秘它到底是何物。

首先我们来介绍下三维坐标空间和二维坐标空间的区别:

image

在3D动画中,要画一个3D模型,必须要有

1、照相机

2、光源

一、照相机

照相机相当于观察位置(你是从那个位置看的)

了解三维场景如何在二维图面上表示的另一种方法就是将场景描述为到观察表面上的投影。

有两种Camera:

1、ProjectionCamera

2、OrthographicCamera

使用 ProjectionCamera,可以指定不同的投影及其属性以更改观察者查看三维模型的方式。

PerspectiveCamera 指定用来对场景进行透视收缩的投影。

ProjectionCamera 的 NearPlaneDistance 和 FarPlaneDistance 属性限制照相机的投影范围。

OrthographicCamera 指定三维模型到二维可视化图面上的正投影。

照相机位置

image

二、光源

与实际的光一样,三维图形中的光能够使图面可见。更确切地说,光确定了场景的哪个部分将包括在投影中。

WPF 中的光对象创建了各种光和阴影效果,而且是按照各种实际光的行为建模的。

您必须至少在场景中包括一个光,否则模型将不可见。

  • AmbientLight:它所提供的环境光以一致的方式照亮所有的对象,而与对象的位置或方向无关。

  • DirectionalLight:像远处的光源那样照亮。 将方向光的 Direction 指定为 Vector3D,但是没有为方向光指定位置。

  • PointLight:像近处的光源那样照亮。 PointLight 具有一个位置并从该位置投射光。

场景中的对象是根据对象相对于光源的位置和距离而被照亮的。PointLightBase 公开 Range 属性,该属性确定一个距离,

超过该距离后模型将无法由光源照亮。 PointLight 还公开了多个衰减属性,这些属性确定光源的亮度如何随距离的增加而减小。

您可以为光源的衰减指定恒定、线性或二次内插算法。

  • SpotLight:从 PointLight 继承。 Spotlight 的照亮方式与 PointLight 类似,但是它既具有位置又具有方向。

它们在 InnerConeAngle 和OuterConeAngle 属性所设置的锥形区域(以度为单位指定)中投射光。

光源是 Model3D 对象,因此您可以转换光源对象并对光源属性(包括位置、颜色、方向和范围)进行动画处理。

 

下面我们通过一个实例来说明:

新建一个WPF项目。

第一步,我们在App.xaml中放一个3D模型的资源:

代码

然后在Window1.xaml中写:

代码

这里引用的资源myTeapot,并应用到了照相机类Viewport3D.Camera和光源类SpotLight和PointLight,

还有一些动画行为(Transform)。

ModelVisual3D在MSDN上的属性有:

image

Viewport3D .Camera 属性:获取或设置将 Viewport3D 的三维内容投影到 Viewport3D 的二维图面的照相机对象。

这里的Position属性是照相机的位置,LookDirection属性是 获取或设置定义摄像机在世界坐标中的拍摄方向的 Vector3D,

UpDirection 获取或设置定义摄像机向上方向的 Vector3D。。

我们要是它动起来,就在Window.Loaded的时候加载动画

代码

运行效果:

image
image

原文地址:https://www.cnblogs.com/dingli/p/1966683.html