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

本文介绍如何通过编程方式改变三维场景的观察角度与场景旋转。包括调整相机位置来改变观察视角,以及通过修改轴的角度实现三维场景旋转的方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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

首先看一下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,RoutedEventArgse)
... {
this.myViewportCamera.Position=newSystem.Windows.Media.Media3D.Point3D(this.myViewportCamera.Position.X,this.myViewportCamera.Position.Y,this.myViewportCamera.Position.Z+100);
}


void leftButton_Click( object sender,RoutedEventArgse)
... {
this.myViewportCamera.Position=newSystem.Windows.Media.Media3D.Point3D(this.myViewportCamera.Position.X,this.myViewportCamera.Position.Y,this.myViewportCamera.Position.Z-100);
}


void backButton_Click( object sender,RoutedEventArgse)
... {
this.myViewportCamera.Position=newSystem.Windows.Media.Media3D.Point3D(this.myViewportCamera.Position.X+100,this.myViewportCamera.Position.Y,this.myViewportCamera.Position.Z);
}


void frontButton_Click( object sender,RoutedEventArgse)
... {
this.myViewportCamera.Position=newSystem.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,RoutedEventArgse)
... {
this.myAngleRotationChair_1.Angle-=10;
}


void up_Click( object sender,RoutedEventArgse)
... {
this.myAngleRotationChair_1.Angle+=10;
}


void left_Click( object sender,RoutedEventArgse)
... {
this.myAngleRotationChair.Angle-=10;
}


void right_Click( object sender,RoutedEventArgse)
... {
this.myAngleRotationChair.Angle+=10;
}

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

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

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值