使用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

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

猜你喜欢

转载自www.cnblogs.com/lonelyxmas/p/9827698.html