WPF_3D绘图一

这篇具有很好参考价值的文章主要介绍了WPF_3D绘图一。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

1.WPF使用DirectX渲染3D元素,它的坐标系如下所示

wpf 3d,WPF,wpf

原点位于呈现区域的中心,x 轴上的正值朝右,但是 y 轴上的正值朝上,z 轴上的正值从原点向外朝向观察者。

2. 3D绘图的四要素

2.1 Viewport3D:视口。

2.2 Camera:相机,提供了三个摄像机类,如下:

      1.PerspectiveCamera:透视相机,近大远小。

      2.OrthographicCamera:正交相机,3D对象保持相同的尺寸。

      3.MatrixCamera:矩阵相机,3D场景变换到2D视图的矩阵。

2.3 Lights:光源,提供了四个灯光类,如下:

     1.AmbientLight:自然光(环境光),它所提供的环境光会照亮所有的对象,而不考虑对象的位置或方向。

     2.DirectionalLight:方向光(平行光),像远处的光源那样照亮(如太阳光)。

     3.PointLight:点光源,像近处的光源那样照亮。

     4.SpotLight:聚光源,它既具有位置又具有方向,在 InnerConeAngle 和 OuterConeAngle 属性所设置的锥形区域(以度为单位指定)中投射光。

      wpf 3d,WPF,wpf

2.4 GeometryModel3D:3D模型

3. 创建一个3D立方体,相关代码如下:

  <Grid>
        <Grid.ColumnDefinitions>
            <ColumnDefinition/>
            <ColumnDefinition Width="300"/>
        </Grid.ColumnDefinitions>
        <Viewport3D>
              <!--摄像机-->
            <Viewport3D.Camera>
                <PerspectiveCamera 
                    FarPlaneDistance="100" 
                    Position="-20,15,15" 
                    LookDirection="2,-1,-1" 
                    UpDirection="0,1,0" 
                    NearPlaneDistance="1" 
                    FieldOfView="60"/>
            </Viewport3D.Camera>
            <!--光源-->
            <ModelVisual3D>
                <ModelVisual3D.Content>
                    <!--自然光-->
                    <AmbientLight Color="#888888"/>
                </ModelVisual3D.Content>
            </ModelVisual3D>
            <!--光源-->
            <ModelVisual3D>
                <ModelVisual3D.Content>
                    <!--方向光-->
                    <DirectionalLight Color="White" Direction="2,3,1"/>
                </ModelVisual3D.Content>
            </ModelVisual3D>
             <!--立方体-->
            <ModelVisual3D>
                <ModelVisual3D.Content>
                    <GeometryModel3D x:Name="cubeGeometry">
                        <GeometryModel3D.Geometry>
                            <!--Positions:立方体六个面的四个点(x,y,z)-->
                            <MeshGeometry3D Positions="0,0,0   10,0,0   0,10,0  10,10,0
                                                                            0,0,0   0,0,10  0,10,0   0,10,10
                                                                            0,0,0   10,0,0   0,0,10   10,0,10
                                                                            10,0,0  10,10,10 10,0,10 10,10,0
                                                                            0,0,10  10,0,10 0,10,10 10,10,10
                                                                            0,10,0  0,10,10 10,10,0 10,10,10"
                                                        TriangleIndices="0,2,1 1,2,3
                                                                                   4,5,6 6,5,7
                                                                                    8,9,10 9,11,10
                                                                                   12,13,14 12,15,13
                                                                                    16,17,18 19,18,17
                                                                                    20,21,22 22,21,23"
                                                         TextureCoordinates="0,0 0,1 1,0 1,1
                                                                                           1,1 0,1 1,0 0,0
                                                                                          0,0 1,0 0,1 1,1
                                                                                          0,0 1,0 0,1 1,1
                                                                                         1,1 0,1 1,0 0,0
                                                                                          1,1 0,1 1,0 0,0">


                            </MeshGeometry3D>
                        </GeometryModel3D.Geometry>
                        <GeometryModel3D.Material>
                            <DiffuseMaterial>
                                <DiffuseMaterial.Brush>
                                    <ImageBrush ImageSource="WdF_fw1200.png"/>
                                </DiffuseMaterial.Brush>
                            </DiffuseMaterial>
                        </GeometryModel3D.Material>
                    </GeometryModel3D>
                </ModelVisual3D.Content>
                <!--立方体绕轴旋转-->
                <ModelVisual3D.Transform>
                    <Transform3DGroup>
                        <RotateTransform3D CenterX="0" CenterY="0" CenterZ="0">
                            <RotateTransform3D.Rotation>
                                <AxisAngleRotation3D Axis="1,0,0" Angle="{Binding ElementName=sliX,Path=Value}"/>
                            </RotateTransform3D.Rotation>
                        </RotateTransform3D>
                        <RotateTransform3D CenterX="0" CenterY="0" CenterZ="0">
                            <RotateTransform3D.Rotation>
                                <AxisAngleRotation3D Axis="0,1,0" Angle="{Binding ElementName=sliY,Path=Value}"/>
                            </RotateTransform3D.Rotation>
                        </RotateTransform3D>
                        <RotateTransform3D CenterX="0" CenterY="0" CenterZ="0">
                            <RotateTransform3D.Rotation>
                                <AxisAngleRotation3D Axis="0,0,1" Angle="{Binding ElementName=sliZ,Path=Value}"/>
                            </RotateTransform3D.Rotation>
                        </RotateTransform3D>
                    </Transform3DGroup>
                </ModelVisual3D.Transform>
            </ModelVisual3D>
        </Viewport3D>
        <StackPanel Grid.Column="1">
            <Slider Name="sliX" Maximum="360" Minimum="-360" Value="0" SmallChange="1" SnapsToDevicePixels="True"/>
            <Slider Name="sliY" Maximum="360" Minimum="-360" Value="0" SmallChange="1" SnapsToDevicePixels="True"/>
            <Slider Name="sliZ" Maximum="360" Minimum="-360" Value="0" SmallChange="1" SnapsToDevicePixels="True"/>
        </StackPanel>
    </Grid>

效果图如下:分别绕x,y,z轴旋转

wpf 3d,WPF,wpf

 wpf 3d,WPF,wpf

 4.案例中使用到的属性说明

     4.1 MeshGeometry3D类,常用的属性如下:

           1.Positions:在计算机的3D世界里,所有的图形都是有三角形组成的,一个正方形由两个三角形组成,一个立方体由12个三角形组成,Positions就是来表示组成3D图形的所有三角形的顶点的,以正方形为例,组成一个正方形需要两个三角形,那就是六个顶点,但是因为这两个三角形共享了一条边,所以只需要四个顶点就可以表示了,当然,你也可以选择把六个点都表示出来,这会为你更好渲染你的3D图形留下方便,不过更多的时候,我们还是选择不重复表示那些共享点。

         2.TriangleIndices:将Positions的顶点集合按一定顺序组合起来,组成所需要的三角形。

         3.TextureCoordinates:将一副2D纹理映射到所建立的3D网格上,参考图如下:

          wpf 3d,WPF,wpf

         文章来源地址https://www.toymoban.com/news/detail-771552.html

到了这里,关于WPF_3D绘图一的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • wpf从cs代码创建简单3D物体和3D Tools研究

    前面已经说了,WPF项目中引入3DTools dll之后,在xaml中加入它的命名空间, xmlns:tools=\\\"clr-namespace:_3DTools;assembly=3DTools\\\" 把Viewport3D标签包含在tools:TrackballDecorator标签之中,就可以用鼠标控制  Viewport3D 中的3d模型; 看一下单独用3DTools dll能否加载3d模型;没有资料; 用ILSpy看一下;

    2024年02月10日
    浏览(40)
  • WPF3D关于HelixToolkit-3D呈现的交互处理

    关于HelixToolkit-这个3D呈现的交互处理推荐使用,因为功能比较强大 一个开源3D库,根据MIT许可证获得许可。MIT许可证非常宽松,允许在专有软件中使用。该库基于 .NET,目前专注于 WPF 平台。 HelixToolkit是.NET Framework的一个开源3D图形库,它主要用于创建和操作3D图形1。 HelixToo

    2024年02月08日
    浏览(57)
  • 研究一段WPF 3D 机械臂代码

    网上下一段代码,运行如下;显示了一个3D机械臂;      xmlns=\\\"http://schemas.microsoft.com/winfx/2006/xaml/presentation\\\",这是WPF命名空间,一般写在xaml头部,它的是这样的,Viewport3D xmlns=\\\"......;     代码的大段有:相机,变换,ModelVisual3D.Children里面有2个ModelVisual3D,第一个ModelVisual3

    2023年04月09日
    浏览(33)
  • WPF 插件HelixToolkit库实现3D显示

    文章目录 前言 一、HelixToolkit安装 二、使用步骤 1.引入库 2.xmal代码设置         3.后端程序         4.3D显示 总结 3D显示、旋转、部件移动(位置获取) 开发一个可导入.stl文件,可视化3D显示模型,部件之间鼠标移动、键盘设置位置等。 WPF开发库HelixToolkit 引入库命名

    2024年02月12日
    浏览(50)
  • Unity3D嵌入WPF

           此文章旨在记录自己做的第一个将Unity3D嵌入到WPF的工控项目,由于实际需要,也搜寻过很多博主的文章进行学习,在进行项目开发后记录如下心得以便日后参考,亦希望大家能多多指教。        由于WPF在桌面应用程序开发且处理业务逻辑时的优点明显,但进行三维

    2024年02月02日
    浏览(34)
  • wpf 3d 坐标系和基本三角形复习

    wpf 3d 坐标系的描述见此,  WPF 3d坐标系和基本三角形_wpf 坐标系_bcbobo21cn的博客-CSDN博客     X轴正向向右,Y轴正向向上;Z轴,正向是从屏幕里边出来,负向是往屏幕里边去;坐标原点是在呈现区域的中心;  画一个三角形如下;         看摄像机属性,摄像机是在呈现区域

    2024年02月13日
    浏览(33)
  • OOCT WPF_D3D项目报错无法加载依赖项

    运行示例项目报错缺少dll,发现运用了这个大老李,通过添加 PATH 路径也无法解决,看到debug文件夹下面没有其他的依赖项。 通过depneds工具可以看到 OCCTProxy_D3D.dll 缺少依赖项,图中的缺项都是OCCT生成的模块dll所以讲这些dll从 ..buildwin64vc14bind 中复制或是全部复制到WPF项目

    2024年04月15日
    浏览(22)
  • 在Window10和Window11系统,WPF使用Viewport3D 渲染失败问题解决方案

            最近遇到个棘手的问题:在供应商提供的戴尔optiplex 3000的12代处理器主机的集成显卡Intel(R) UHD Graphics 770上使用Viewport3D 渲染失败(3D模型显示不了,或者是显示不全),之前开发验证使用的是集成显卡Intel(R) UHD Graphics 630、集成显卡Intel(R) HD Graphics 4600、集成显卡Intel

    2024年02月08日
    浏览(60)
  • WPF 性能优化-高刷新绘图

    笔者之前接到一个需求,需要在WPF上实时显示病人实时的生理信号(心电图等)。团队开发,需求很快做完了(Unit test 效果图如下) 但是后来发布到产品上发现,资源占用比本机的要大。本地监控后,发现随着时间推移内存和Page Faults 都在增长,如果在产品上长期(几个月甚至

    2024年02月04日
    浏览(36)
  • WPF 基础绘图 创建和加工图片

    本文将从控制台开始,告诉大家一个非常简单的 WPF 基础绘图方法,通过本文的方法可以调用 WPF 上层人类友好的方法,充分利用 GPU 资源,创建或加工图片,最终结果可以输出到本地文件,可支持编码出多种不同的图片格式 本文仅用到 WPF 的多媒体渲染层,在 WPF 的这一层上

    2024年04月26日
    浏览(31)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包