Username: Password:

使用WPF实现3D场景[一]
来源:CSDN作者:汉飞扬 发布时间:2008-02-17 00:00:00

在这篇文章里,将介绍怎样实现一个简单的三维场景,一个三维的空间,包括空间内的三维物体的组合.

首先介绍一下一个三维场景里的基本元素:

先是定义一个简单的三维的场景环境

代码如下:

<Viewport3D Name="myViewport">
Viewport3D>

以上是定义了一个名称叫做 myViewport 的的三维场景,接下来能够在这个三位场景里添加一些元素:

元素一:照相机

照相机是三维场景内用户的视角,当然照相机也是唯一的。

来看怎样定义一个简单的照相机代码:

<Viewport3D.Camera>
        
<PerspectiveCamera FarPlaneDistance="3000" NearPlaneDistance="0.25" FieldOfView="90" Position="1800,0,0" LookDirection="-1,0,0" UpDirection="0,1,0">PerspectiveCamera>
      
Viewport3D.Camera>

这里面描述了照相机在三维场景里的位置,包括他观察的角度,最远的视线,等等这样信息和属性。假如想灵活的使用照相机改变视角会在第二讲和第三讲里详尽的介绍。

元素一:三维模型

三维模型是三维场景内的物体,也就是模型中的元素,不唯一,能够组合,重叠。

来看怎样定义一个简单的三维模型组合的代码:

      <ModelVisual3D x:Name="topModelVisual3D">
        
<ModelVisual3D.Children>
          
<ModelVisual3D>
            
<ModelVisual3D.Content>
              
<DirectionalLight Color="#FFFFFFFF" Direction="-3,-4,-5" />
            
ModelVisual3D.Content>
          
ModelVisual3D>

          
<ModelVisual3D>
            
<ModelVisual3D.Content>
              
<GeometryModel3D Geometry="">
                
<GeometryModel3D.Material>
                  
<DiffuseMaterial>
                    
<DiffuseMaterial.Brush>
                      
<SolidColorBrush Color="Yellow" Opacity="1.0" />
                    
DiffuseMaterial.Brush>
                  
DiffuseMaterial>
                
GeometryModel3D.Material>
                
<GeometryModel3D.Transform>
                  
<TranslateTransform3D OffsetX="0" OffsetY="-200" OffsetZ="-600" />
                
GeometryModel3D.Transform>
              
GeometryModel3D>
            
ModelVisual3D.Content>
          
ModelVisual3D>

          
<ModelVisual3D>
            
<ModelVisual3D.Content>
              
<GeometryModel3D Geometry="">
                
<GeometryModel3D.Material>
                  
<DiffuseMaterial>
                    
<DiffuseMaterial.Brush>
                      
<SolidColorBrush Color="Yellow" Opacity="1.0" />
                    
DiffuseMaterial.Brush>
                  
DiffuseMaterial>
                
GeometryModel3D.Material>
                
<GeometryModel3D.Transform>
                  
<TranslateTransform3D OffsetX="0" OffsetY="20" OffsetZ="60" />
                
GeometryModel3D.Transform>
              
GeometryModel3D>
            
ModelVisual3D.Content>
          
ModelVisual3D>


          
<ModelVisual3D>
            
<ModelVisual3D.Content>
              
<GeometryModel3D Geometry="">
                
<GeometryModel3D.Material>
                  
<DiffuseMaterial>
                    
<DiffuseMaterial.Brush>
                      
<SolidColorBrush Color="black" Opacity="1.0" />
                    
DiffuseMaterial.Brush>
                  
DiffuseMaterial>
                
GeometryModel3D.Material>
                
<GeometryModel3D.Transform>
                  
<TranslateTransform3D OffsetX="75" OffsetY="20" OffsetZ="0" />
                
GeometryModel3D.Transform>
              
GeometryModel3D>
            
ModelVisual3D.Content>
            
            
            
<ModelVisual3D.Transform>
              
<Transform3DGroup>
                
<ScaleTransform3D ScaleX="10" ScaleY="10" ScaleZ="10"  x:Name="scaleTransform"/>
                
<MatrixTransform3D/>
                
<RotateTransform3D >
                  
<RotateTransform3D.Rotation >
                    
<AxisAngleRotation3D Angle="275" Axis="0,0,1" x:Name="myAngleRotationMan"/>
                  
RotateTransform3D.Rotation>
                
RotateTransform3D>
              
Transform3DGroup>
            
ModelVisual3D.Transform> 
            
            
          
ModelVisual3D>
        
ModelVisual3D.Children>
        
        
<ModelVisual3D.Transform>
          
<Transform3DGroup>
            
<MatrixTransform3D/>
            
<RotateTransform3D >
              
<RotateTransform3D.Rotation >
                
<AxisAngleRotation3D Angle="0" Axis="0,10,0" x:Name="myAngleRotationChair"/>
              
RotateTransform3D.Rotation>
            
RotateTransform3D>
          
Transform3DGroup>
        
ModelVisual3D.Transform>
      
ModelVisual3D>

来看一下效果:

到这里就完成了整个的三维场景的建立。

补充元素:动画效果

假如想让整体的三维模型都能动起来,就需要为三维场景添加动画效果。

看一段能够让三维场景按纵轴(中央轴)旋转的代码:

   <Viewport3D.Triggers>
        
<EventTrigger RoutedEvent="Viewport3D.Loaded">
          
<BeginStoryboard>
            
<Storyboard>
              
<DoubleAnimation 
                
Storyboard.TargetName="myAngleRotationChair"
                Storyboard.TargetProperty
="Angle"
                From
="0" To="360" Duration="0:0:10"
                RepeatBehavior
="Forever" />
            
Storyboard>
          
BeginStoryboard>
        
EventTrigger>
      
Viewport3D.Triggers>

填写如上代码之后就完成了一个最简单的三维动画的处理。

 

查看本文来源

喜欢本文,那就收藏到:

    Del.icio.us Google书签 Digg Live Bookmark Technorati Furl Yahoo书签 Facebook 百度搜藏 新浪ViVi 365Key网摘 天极网摘 和讯网摘 博拉网 POCO网摘 添加到饭否 QQ书签 Digbuzz我挖网
相关评论  我也要评论
还没有关于此文章的相关评论!
  • 昵称: (为空则显示guest)
  • 评论分数: ★ ★ ★★★ ★★★★ ★★★★★
  • 评论内容:(不能超过250字,需审核后才会公布,请自觉遵守互联网相关政策法规。
  • 导航
    赞助商
    文章类别
    订阅