WPF 3D开发教程(二)

二、相机、光源

2.1 相机和投影

我们一般会用到两种相机,PerspectiveCamera和OrthographicCamera。

PerspectiveCamera:透视投影相机,更符合世界实际。

OrthographicCamera:正投影相机,不会出现近大远小的效果。

WPF 3D开发教程(二)_第1张图片

更常用的是PerspectiveCamera,所以我们主要介绍这种相机的属性。

相机有三个重要属性,我们一般是要设置好的。

LookDirection:相机镜头朝向。

UpDirection:相机的上方向是哪里。

Position:相机放在哪里。

我们举例子来说明这些属性的意义。假设我们有如下图所示的一个正方体:

WPF 3D开发教程(二)_第2张图片

当相机的参数设置如下时:

Position="1.75,2.75,2.75" LookDirection="-1.75,-2.75,-2.75" UpDirection="0,1,0"

我们将看到如下画面:

WPF 3D开发教程(二)_第3张图片

UpDirection是最好理解的,假设我们把它反转,即参数改为:

Position="1.75,2.75,2.75" LookDirection="-1.75,-2.75,-2.75" UpDirection="0,-1,0"

我们将看到整个画面反了过来:

WPF 3D开发教程(二)_第4张图片

如果我们想看左边那个面,那我们需要修改Position这个属性,我们应该要走到x轴的负半轴才能看到。参数修改为:

Position="-0.75,2.75,2.75" LookDirection="1.25,-2.75,-2.75" UpDirection="0,1,0"

我们将看到如下画面:

WPF 3D开发教程(二)_第5张图片

我们现在是俯视正方体的,假如我们把参数修改成(LookDirection调整):

Position="1.75,2.75,2.75" LookDirection="-1.75,-1.5,-2.75" UpDirection="0,1,0"

相当于视角往上移,我们将看到如下画面:

WPF 3D开发教程(二)_第6张图片

2.2 光源

WPF支持以下不同类型的光源:

AmbientLight(环境光) :它所提供的环境光会照亮所有的对象,而不考虑对象的位置或方向。

DirectionalLight(平行光) :像远处的光源那样照亮(如太阳光)。将方向光的 Direction 指定为 Vector3D,但是没有为方向光指定位置。

PointLight(点光源) :像近处的光源那样照亮。 PointLight 具有一个位置并从该位置投射光。 场景中的对象是根据对象相对于光源的位置和距离而被照亮的。 PointLightBase 公开 Range 属性,该属性确定一个距离,超过该距离后模型将无法由光源照亮。 PointLight 还公开了多个衰减属性,这些属性确定光源的亮度如何随距离的增加而减小。 您可以为光源的衰减指定恒定、线性或二次内插算法。

SpotLight(聚光灯) :从 PointLight 继承。 Spotlight 的照亮方式与 PointLight 类似,但是它既具有位置又具有方向。 它们在 InnerConeAngle 和 OuterConeAngle 属性所设置的锥形区域(以度为单位指定)中投射光。

各种光源的示意图如下:

WPF 3D开发教程(二)_第7张图片

还有一点需要注意的是,光源的颜色跟材质的颜色会进行与处理。例如白光照射在任何颜色上,都是物体原来的颜色;而红光照射到物体,只有红色分量的颜色才会显现出来。

你可能感兴趣的:(WPF)