码迷,mamicode.com
首页 > Windows程序 > 详细

使用WPF实现3D场景[二]

时间:2018-10-22 01:09:23      阅读:254      评论:0      收藏:0      [点我收藏+]

标签:near   one   arp   sina   release   ken   方向   web   spl   

原文:使用WPF实现3D场景[二]

在上一篇的文章里我们知道如何构造一个简单的三维场景,这次的课程我将和大家一起来研究如何用代码,完成对建立好了的三维场景的观察。

首先看一下DEMO的界面:

?

技术分享图片

?

可以看到8个方向的按钮,它们将提供观察角度的变化和三维场景的旋转这样的功能。

观察位置变化:

实现原理:改变场景内照相机的绝对位置等属性

实现代码:

定义照相机

技术分享图片<Viewport3D?Name="myViewport"?Margin="0,0,0,0">
技术分享图片????????
<Viewport3D.Camera>
技术分享图片??????????
<PerspectiveCamera?x:Name="myViewportCamera"?FarPlaneDistance="5000"?NearPlaneDistance="0.25"?FieldOfView="90"?Position="1800,0,0"?LookDirection="-1,0,0"?UpDirection="0,1,0"></PerspectiveCamera>
技术分享图片????????
</Viewport3D.Camera>

定义照相机(观察角度)的变化事件:

技术分享图片????????void?rightButton_Click(object?sender,?RoutedEventArgs?e)
技术分享图片????????
{
技术分享图片????????????
this.myViewportCamera.Position?=?new?System.Windows.Media.Media3D.Point3D(this.myViewportCamera.Position.X,?this.myViewportCamera.Position.Y?,?this.myViewportCamera.Position.Z?+100);
技术分享图片????????}

技术分享图片
技术分享图片????????
void?leftButton_Click(object?sender,?RoutedEventArgs?e)
技术分享图片????????
{
技术分享图片????????????
this.myViewportCamera.Position?=?new?System.Windows.Media.Media3D.Point3D(this.myViewportCamera.Position.X?,?this.myViewportCamera.Position.Y,?this.myViewportCamera.Position.Z-?100);
技术分享图片????????}

技术分享图片
技术分享图片????????
void?backButton_Click(object?sender,?RoutedEventArgs?e)
技术分享图片????????
{
技术分享图片????????????
this.myViewportCamera.Position?=?new?System.Windows.Media.Media3D.Point3D(this.myViewportCamera.Position.X?+?100,?this.myViewportCamera.Position.Y,?this.myViewportCamera.Position.Z?);
技术分享图片????????}

技术分享图片
技术分享图片????????
void?frontButton_Click(object?sender,?RoutedEventArgs?e)
技术分享图片????????
{
技术分享图片????????????
this.myViewportCamera.Position?=?new?System.Windows.Media.Media3D.Point3D(this.myViewportCamera.Position.X?-?100,?this.myViewportCamera.Position.Y?,?this.myViewportCamera.Position.Z?);
技术分享图片????????}

?

三维场景角度变化:

实现原理:改变三维场景内定义的轴的角度

实现代码:

定义操作轴:

技术分享图片??????????<ModelVisual3D.Transform>
技术分享图片????????????
<Transform3DGroup>
技术分享图片??????????????
<MatrixTransform3D/>
技术分享图片??????????????
<RotateTransform3D?>
技术分享图片????????????????
<RotateTransform3D.Rotation?>
技术分享图片??????????????????
<AxisAngleRotation3D?Angle="0"?Axis="0,10,0"?x:Name="myAngleRotationChair"/>
技术分享图片????????????????
</RotateTransform3D.Rotation>
技术分享图片??????????????
</RotateTransform3D>
技术分享图片??????????????
<RotateTransform3D?>
技术分享图片????????????????
<RotateTransform3D.Rotation?>
技术分享图片??????????????????
<AxisAngleRotation3D?Angle="0"?Axis="0,0,10"?x:Name="myAngleRotationChair_1"/>
技术分享图片????????????????
</RotateTransform3D.Rotation>
技术分享图片??????????????
</RotateTransform3D>
技术分享图片????????????
</Transform3DGroup>
技术分享图片??????????
</ModelVisual3D.Transform>
技术分享图片????????
</ModelVisual3D>

定义轴旋转代码:

技术分享图片?void?down_Click(object?sender,?RoutedEventArgs?e)
技术分享图片????????
{
技术分享图片????????????
this.myAngleRotationChair_1.Angle?-=?10;
技术分享图片????????}

技术分享图片
技术分享图片????????
void?up_Click(object?sender,?RoutedEventArgs?e)
技术分享图片????????
{
技术分享图片????????????
this.myAngleRotationChair_1.Angle?+=?10;
技术分享图片????????}

技术分享图片
技术分享图片????????
void?left_Click(object?sender,?RoutedEventArgs?e)
技术分享图片????????
{
技术分享图片????????????
this.myAngleRotationChair.Angle?-=?10;
技术分享图片????????}

技术分享图片
技术分享图片????????
void?right_Click(object?sender,?RoutedEventArgs?e)
技术分享图片????????
{
技术分享图片????????????
this.myAngleRotationChair.Angle?+=?10;
技术分享图片????????}

?

好的~如果您对更多的三维场景变成想有所了解,请关注第三讲。

如果您想下载源代码或收听语音教程,请访问:微软webcast

?

再次感谢您的关注,谢谢!

?

使用WPF实现3D场景[二]

标签:near   one   arp   sina   release   ken   方向   web   spl   

原文地址:https://www.cnblogs.com/lonelyxmas/p/9827698.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!