使用WPF实现3D场景[二]
2007-02-13 15:25
501 查看
在上一篇的文章里我们知道如何构造一个简单的三维场景,这次的课程我将和大家一起来研究如何用代码,完成对建立好了的三维场景的观察。
首先看一下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
再次感谢您的关注,谢谢!
首先看一下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场景[一]
- 手把手教你使用Silverlight实现3D场景二(创建自定义模版控件为物件应用3D动画)
- 手把手教你使用Silverlight实现3D场景一(素材准备,使用Blend创建主场景)
- WPF技术触屏上的应用系列(三): 视频播放器的使用及视频播放、播放、暂停、可拖动播放进度效果实现
- 通过例子学设计模式之--外观模式以及使用场景说明(C++实现)
- 微信H5支付可以实现在非微信浏览器(如QQ浏览器、谷歌浏览器、Safari等)中使用微信支付的场景。
- c#,使用WPF实现iPhone的短信框效果
- [Unity3D]手机3D游戏开发:如何实现最高分的存储与显示(二)----使用GUI.Box显示文字
- 如何使用CSS3实现一个平滑的3D文本标题
- Android Gradle 常用使用场景实现方式的总结
- 使用WPF技术实现基于MSN协议的五子棋程序
- [Unity3D]手机3D游戏开发:如何实现最高分的存储与显示(七)----使用Game ID避免数据重复输入
- 使用CSS3实现3D图片滑块效果
- 使用threejs实现3D全景漫游
- 通过例子学设计模式之--简单工厂模式以及使用场景说明(C++实现)
- 如何实现一个HTML5 RPG游戏引擎——第三章,使用幕布实现场景切换
- WPF实现3D翻转的动画效果
- 使用HoloToolKit实现导航手势旋转3D模型
- 使用UI Automation实现自动化测试--5 (Winfrom和WPF中弹出和关闭对话框的不同处理方式)
- javascript真的是异步的吗?且看setTimeout的实现原理以及setTimeout(0)的使用场景