照相机和投影
处理二维对象的开发人员习惯于将绘图基元置于二维屏幕上。当您创建三维场景时,一定要记住您实际上是要创建三维对象的二维表示形式。由于三维场景的外观会因观察者的观察位置不同而异,因此您必须指定观察位置。可以使用Camera 类来为三维场景指定观察位置。
了解三维场景如何在二维图面上表示的另一种方法就是将场景描述为到观察表面上的投影。使用ProjectionCamera,可以指定不同的投影及其属性以更改观察者查看三维模型的方式。PerspectiveCamera指定用来对场景进行透视收缩的投影。 换言之,PerspectiveCamera 提供消失点透视。您可以指定照相机在场景坐标系中的位置、照相机的方向和视野以及用来定义场景中“向上”方向的向量。下图阐释PerspectiveCamera 的投影。
ProjectionCamera 的 NearPlaneDistance 和 FarPlaneDistance属性限制照相机的投影范围。由于照相机可以位于场景中的任何位置,因此照相机实际上可能会位于模型内部或者紧靠模型,这使得很难正确区分对象。使用NearPlaneDistance,可以指定一个距离照相机的最小距离,即,在超过该距离后将不绘制对象。 相反,使用FarPlaneDistance,可以指定一个距离照相机的距离(即,在超过该距离后将不绘制对象),从而确保因距离太远而无法识别的对象将不包括在场景中。
照相机位置
OrthographicCamera指定三维模型到二维可视化图面上的正投影。与其他照相机一样,它指定位置、观察方向和“向上”方向。但是,与PerspectiveCamera 不同的是,OrthographicCamera描述了不包括透视收缩的投影。换言之,OrthographicCamera描述了一个侧面平行的取景框,而不是侧面汇集在场景中一点的取景框。下图演示使用 PerspectiveCamera 和OrthographicCamera 查看同一模型时的情况。
透视投影和正投影
<Viewport3D>
<Viewport3D.Camera>
<PerspectiveCameraPosition="-2,2,2"LookDirection="2,-2,-2"UpDirection="0,1,0"/>
</Viewport3D.Camera>
<Viewport3D.Children>
<ModelVisual3Dx:Name="Light"> //照亮操作,否则图形不能显示颜色
<ModelVisual3D.Content>
<AmbientLight/>
</ModelVisual3D.Content>
</ModelVisual3D>
<ModelVisual3D> <ModelVisual3D.Content> <GeometryModel3D> <GeometryModel3D.Geometry> <MeshGeometry3D Positions="1,0,0 0,-1,0 0,0,1"/> </GeometryModel3D.Geometry> <GeometryModel3D.Material> <DiffuseMaterial Brush="Yellow" /> </GeometryModel3D.Material> </GeometryModel3D> </ModelVisual3D.Content> </ModelVisual3D>
</Viewport3D>
联系客服