翼度科技»论坛 编程开发 .net 查看内容

WFP3D绘图

5

主题

5

帖子

15

积分

新手上路

Rank: 1

积分
15
WPF本身不支持直接的3D绘图,但是它提供了一些用于实现3D效果的高级技术。如果你想要在WPF中进行3D绘图,你可以使用两种主要的方法:

  • WPF 3D:这是一种在WPF应用程序中创建3D图形的方式。WPF 3D提供了一些基本的3D形状(如立方体、球体和锥体)以及一些用于控制3D场景和对象的工具(如相机、光源和材质)。
 在WPF中,3D对象模型的材质可以使用以下三种

  • DiffuseMaterial:漫反射,反射场景光效果
  • EmissiveMaterial:自发光,类似于电灯 
  • SpecularMaterial:全反射,可以映射场景 贴图
在WPF中,一个3D模型的材质,就是决定模型看起来是什么样子的一种很重要的元素,如粗糙度、颜色、发光度等 WPF 3D对象模型光源如下AmbientLight:环境光-  提供环境光,会照亮所有的对象,而不考虑对象的位置或方向。DirectionalLight:平行光  -  它像远处的光源那样照亮(如太阳光),只具有一个Direction属性,没有位置信息,因此不直接投射到任何特定的对象上,而是照亮场景中的所有对象。PointLight:点光源 -  像近处的光源那样照亮,具有一个位置并从该位置投射光,场景中的对象是根据对象相对于光源的位置和距离而被照亮的。SpotLight:聚光灯  -  从PointLight继承,它的照亮方式与PointLight类似,但是它既具有位置又具有方向。相关属性   Color:灯光颜色   Direction:光线方向(平行光、聚光灯)   Position:光源坐标(点光源、聚光灯)   Range:灯光范围(点光源)   InnerConeAngle:内光柱照射角度(聚光灯)   OuterConeAngle:外光柱照射角度(聚光灯) 
属性说明备注
MeshGemetry3D网格标签 
Positions呈现3D图形的标签  Positions="0,0,0(x,y,z)     3,0,0      3,2,0      0,2,0" 一个面的4个点
TraiangleIndices3 角形创建TriangleIndices ="0,3,2(第一组) 0,1,2(第二组)" 设置Positions的3个点组成一个三角行
OrthographicCamera  正交相机(远近比例都一样-很少用) 
PerspectiveCamera    透视相机(近比例长远比例小,符合我们正常观察事物的视觉-常用) 
TextureCoordinates设置平面对象与3D对象的映射关系-用来解决平面设置背景图显示问题-如果不设置这个属性平面设置的背景图不显示TextureCoordinates="1,1 1,0 0,0 0,1"
相机标签对象属性
属性说明备注
Position相机的空间坐标(X,Y,Z)Position="100,100,100" 设置视角x,y,z
LookDirection观察方向,向量,相机观察口朝向LookDirection="-2,-2,-2" 设置相机的观看视角-相机观察的方向
FieldOfView(透视相机属性) / 视野范围,一个值FieldOfView="90" 设置相机与观看物体的距离,离得远观看物体区域范围大,离得近观看物体区域范围小
Width(正交相机属性)(焦距),视野范围Width="50"
UpDirection相机上方方向,控制相机观察口旋转UpDirection="0,1,0" (x, y,z)设置相机视口的旋转角度,斜着拍还是正着拍
FarPlaneDistance远景距离,大于这个距离的场景不渲染FarPlaneDistance="1000" 设置相机远处景色的渲染范围,如果值设置的比较小,远处景色是模糊的
NearPlaneDistance近景距离,小于这个距离的场景不渲染NearPlaneDistance="1" 设置相机近处的晶圆渲染范围,如果值越大,近处景色是模糊的
  1. <Window.Triggers>
  2.     <EventTrigger RoutedEvent="Window.Loaded">
  3.         <BeginStoryboard>
  4.             
  5.             <Storyboard RepeatBehavior="Forever">
  6.                
  7.                
  8.                
  9.                
  10.                
  11.                 <DoubleAnimation Duration="0:0:7"
  12.                              Storyboard.TargetName="aar"
  13.                              Storyboard.TargetProperty="Angle"
  14.                              From="0"
  15.                              To="360"/>
  16.             </Storyboard>
  17.         </BeginStoryboard>
  18.     </EventTrigger>
  19. </Window.Triggers>
  20. <Grid>
  21.    
  22.    
  23.     <Viewport3D>
  24.         
  25.         
  26.         <Viewport3D.Camera>
  27.             
  28.             
  29.             
  30.             
  31.             
  32.             
  33.             
  34.             <PerspectiveCamera Position="100,100,100"
  35.                    LookDirection="-2,-2,-2"
  36.                    FieldOfView="90"
  37.                    UpDirection="0,1,0"
  38.                    FarPlaneDistance="1000"
  39.                    NearPlaneDistance="1">
  40.             </PerspectiveCamera>
  41.             
  42.             
  43.             
  44.         </Viewport3D.Camera>
  45.         
  46.         
  47.         <ModelVisual3D>
  48.             
  49.             <ModelVisual3D.Content>
  50.                
  51.                 <Model3DGroup>
  52.                     
  53.                     
  54.                     
  55.                        
  56.                     
  57.                     
  58.                     
  59.                        
  60.                     
  61.                     
  62.                     
  63.                     
  64.                        
  65.                     
  66.                     
  67.                     
  68.                     
  69.                     
  70.                     <SpotLight Color="Orange" InnerConeAngle="100"
  71.                OuterConeAngle="40"
  72.                Position="50,50,50"
  73.                Direction="-1,-1,-1"/>
  74.                 </Model3DGroup>
  75.             </ModelVisual3D.Content>
  76.         </ModelVisual3D>
  77.         
  78.         
  79.         <ModelUIElement3D>
  80.             <ModelUIElement3D.Model>
  81.                
  82.                 <GeometryModel3D>
  83.                     
  84.                     
  85.                     <GeometryModel3D.Material>
  86.                         <MaterialGroup>
  87.                            
  88.                            
  89.                            
  90.                            
  91.                            
  92.                             <DiffuseMaterial>
  93.                                 <DiffuseMaterial.Brush>
  94.                                     <ImageBrush ImageSource="Arrow.png"/>
  95.                                 </DiffuseMaterial.Brush>
  96.                             </DiffuseMaterial>
  97.                            
  98.                            
  99.                            
  100.                         </MaterialGroup>
  101.                     </GeometryModel3D.Material>
  102.                     
  103.                     <GeometryModel3D.Geometry>
  104.                         
  105.                         
  106.                         
  107.                         
  108.                         <MeshGeometry3D Positions="0,0,0     3,0,0      3,2,0      0,2,0"
  109.                                  TriangleIndices="0,2,3 0,1,2"
  110.                                         TextureCoordinates="1,1 1,0 0,0 0,1"/>  
  111.                         
  112.                         
  113.                         
  114.                     </GeometryModel3D.Geometry>
  115.                 </GeometryModel3D>
  116.             </ModelUIElement3D.Model>
  117.         </ModelUIElement3D>
  118.         
  119.         
  120.         <ModelUIElement3D>
  121.             <ModelUIElement3D.Model>
  122.                
  123.                 <GeometryModel3D>
  124.                     
  125.                     
  126.                     <GeometryModel3D.Material>
  127.                         <MaterialGroup>
  128.                            
  129.                            
  130.                            
  131.                             <DiffuseMaterial Brush="Red"/>
  132.                            
  133.                            
  134.                            
  135.                            
  136.                            
  137.                         </MaterialGroup>
  138.                     </GeometryModel3D.Material>
  139.                     
  140.                     <GeometryModel3D.Geometry>
  141.                         
  142.                         
  143.                         
  144.                         <MeshGeometry3D Positions="3,2,1     3,2,0      3,0,0      3,0,1"
  145.                       TriangleIndices="0,3,1    1,3,2"/>
  146.                     </GeometryModel3D.Geometry>
  147.                 </GeometryModel3D>
  148.             </ModelUIElement3D.Model>
  149.         </ModelUIElement3D>
  150.         
  151.         
  152.         <ModelUIElement3D>
  153.             
  154.             <ModelUIElement3D.Transform>
  155.                
  156.                 <Transform3DGroup>
  157.                     
  158.                     <RotateTransform3D CenterX="0" CenterY="0" CenterZ="0">
  159.                         
  160.                         <RotateTransform3D.Rotation>
  161.                            
  162.                             <AxisAngleRotation3D Axis="1,0,0" Angle="-90"/>
  163.                         </RotateTransform3D.Rotation>
  164.                     </RotateTransform3D>
  165.                     <RotateTransform3D CenterX="0" CenterY="0" CenterZ="0">
  166.                         <RotateTransform3D.Rotation>
  167.                            
  168.                             <AxisAngleRotation3D Axis="0,1,0" x:Name="aar"/>
  169.                         </RotateTransform3D.Rotation>
  170.                     </RotateTransform3D>
  171.                 </Transform3DGroup>
  172.             </ModelUIElement3D.Transform>
  173.             
  174.             <ModelUIElement3D.Model>
  175.                
  176.                 <GeometryModel3D x:Name="gm">
  177.                     
  178.                     <GeometryModel3D.Material>
  179.                         
  180.                         <DiffuseMaterial>
  181.                             <DiffuseMaterial.Brush>
  182.                                 <ImageBrush ImageSource="Earth.jpg"/>
  183.                             </DiffuseMaterial.Brush>
  184.                         </DiffuseMaterial>
  185.                     </GeometryModel3D.Material>
  186.                 </GeometryModel3D>
  187.             </ModelUIElement3D.Model>
  188.         </ModelUIElement3D>
  189.     </Viewport3D>
  190. </Grid>
复制代码
  后台关于3D地球的代码
[code]public MainWindow(){    InitializeComponent();    // 绑定加载事件    this.Loaded += MainWindow_Loaded;}/// /// 窗体加载/// /// /// private void MainWindow_Loaded(object sender, RoutedEventArgs e){    this.gm.Geometry = this.SetEarth(180, 180, 50);}/// /// 生成三维地球算法/// 圆弧的计算公式/// /// 纬度方向切多少份/// 精度方向切多少份/// 地球半径/// private MeshGeometry3D SetEarth(int numx, int numz, double r = 3){    MeshGeometry3D mesh = new MeshGeometry3D();    double dTh = 2 * Math.PI / numx;    double dPhi = Math.PI / numz;    double X(double th, double phi) => r * Math.Sin(phi) * Math.Cos(th);    double Y(double th, double phi) => r * Math.Sin(phi) * Math.Sin(th);    double Z(double phi) => r * Math.Cos(phi);    // Make the points.    for (int i = 0; i

举报 回复 使用道具