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

简介: 原文:使用WPF实现3D场景[二] 在上一篇的文章里我们知道如何构造一个简单的三维场景,这次的课程我将和大家一起来研究如何用代码,完成对建立好了的三维场景的观察。
原文: 使用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 + 100this.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 - 100this.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

 

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

 

目录
相关文章
|
C#
WPF 界面实现多语言支持 中英文切换 动态加载资源字典
原文:WPF 界面实现多语言支持 中英文切换 动态加载资源字典 1、使用资源字典,首先新建两个字典文件en-us.xaml、zh-cn.xaml。定义中英文的字符串在这里面【注意:添加xmlns:s="clr-namespace:System;assembly=mscorlib】 zh-cn.
3175 0
|
IDE C# 开发工具
WPF钟表效果实现
中WPF中的RotateTransform实现UI元素的旋转,并模拟钟表的秒针、分针和时针。
1194 0
WPF钟表效果实现
|
IDE 编译器 C#
WPF实现强大的动态公式计算
数据库可以定义表不同列之间的计算公式,进行自动公式计算,但如何实现行上的动态公式计算呢?行由于可以动态扩展,在某些应用场景下将能很好的解决实际问题。本文就探讨一下如何在WPF中实现一种基于行字段的动态公式计算。
1062 0
WPF实现强大的动态公式计算
|
网络协议 C# 移动开发
C# WPF上位机实现和下位机TCP通讯
C# WPF上位机实现和下位机TCP通讯下位机使用北京大华程控电源DH1766-1,上位机使用WPF。实现了电压电流实时采集,曲线显示。上午在公司调试成功,手头没有程控电源,使用TCP服务端模拟。昨天写的TCP服务端正好排上用场。
2397 0
|
C#
WPF中获取TreeView以及ListView获取其本身滚动条的方法,可实现自行调节scoll滚动的位置(可相应获取任何控件中的内部滚动条)
原文:WPF中获取TreeView以及ListView获取其本身滚动条的方法,可实现自行调节scoll滚动的位置(可相应获取任何控件中的内部滚动条) 对于TreeView而言: TreeViewAutomationPeer lvap = new TreeViewAuto...
2399 0
|
XML 自然语言处理 C#
WPF 多语言实现
原文:WPF 多语言实现 很多国际化的程序都提供了多语言的选项,这样方便不同国家的使用者更方便的使用软件。这篇博客中将介绍在WPF中实现多语言的方式。 方式一,使用WPF动态资源的方式实现。先简单介绍下StaticResource和DynamicResource,这两者的区别在于动态资源改变后会实时的体现出来,而静态资源只加载一次,后面对资源的任何改变都不会体现出来。
1576 0
|
C#
WPF实现三星手机充电界面
原文:WPF实现三星手机充电界面 GitHub地址:https://github.com/ptddqr/wpf-samsung-phone-s5-charging-ui/tree/master 先上效果图 这个效果来自于三星S5的充电界面,版权归三星所有,这里仅仅是技术实现.
1707 0
|
C# vr&ar
WPF实现物理效果 拉一个小球
原文:WPF实现物理效果 拉一个小球 一直以来都对物理效果有神秘感,完全不知道怎么实现的.直到看到了周银辉在老早前写的一篇博客:http://www.cnblogs.com/zhouyinhui/archive/2007/06/23/793724.
971 0
|
C#
WPF实现Twitter按钮效果
原文:WPF实现Twitter按钮效果 最近上网看到这个CSS3实现的Twitter按钮,感觉很漂亮,于是想用WPF来实现下. 实现这个效果,参考了CSS3 原文地址:http://www.html5tricks.
1242 0
|
C# UED 自然语言处理
在WPF中实现图片一边下载一边显示
原文 在WPF中实现图片一边下载一边显示 当我们上网查看一个较大的图片时,浏览器能一边下载一边显示,这样用户体验是比较好的,但在WPF程序中,当我们通过如下方式显示一幅图片时:     img.Source = new BitmapImage(new Uri("http://localhost:8000/www/test.jpg")); 只能等到图片下载完成时才能显示出来,当图片较大时需要等待很久,即使在旁边放个进度条给人的感觉仍然不好。
1069 0