ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

WPF 3D 轮播可操控面板

2022-01-09 20:03:13  阅读:177  来源: 互联网

标签:轮播 相机 坐标 几何 WPF Viewport3D 3D


最近有个项目,项目需求中有个功能是要用3D旋转轮播图效果,每个面板又要能像2D那样可操作,由于之前没有3D的经验。没办法只能花几天时间学习学习。先来了解WPF 3D最基本的几个知识点:

1、坐标系:坐标方向得搞清楚

2、Viewport3D

WPF中使用Viewport3D作为3D物体的显示容器,我们所有的东西都要放在Viewport3D中

包括:

1、相机:

一般用PerspectiveCamera

<PerspectiveCamera Position="0.5,0.5,0.5" LookDirection="0,0,-0.5" UpDirection="0,1,0" FieldOfView="90"/>

Position:相机位置,离物体远看到的东西小,离得近看到的东西大

LookDirection:相机对准的方向,就像我们眼睛看的方向

UpDirection:相机的后面,就像我们的头的(我不怎么关注它)

FieldOfView:视角范围,就像我们眼睛看到的扇形范围

2、ModelVisual3D 3d可视化模型

        1、灯光:是Viewport3D的Children

有好几种,我用AmbientLight

<AmbientLight Color="White"/>

        2、可视化元素(点,线,面,体:都要通过坐标生成,WPF不提供具体的3D模型)

<GeometryModel3D>     <!--几何图型-->
   <GeometryModel3D.Geometry>
        <!--什么几何图型? 网格几何图型-->
      <MeshGeometry3D Positions=" 0,0,0 0,1,0 1,1,0 1,0,0" TriangleIndices="0,3,1  1,3,2"/>
   </GeometryModel3D.Geometry>
   <GeometryModel3D.Material>
       <DiffuseMaterial Brush="Blue"/>
   </GeometryModel3D.Material>
</GeometryModel3D>

既然要在3维坐标中体现,把3维坐标看成立体的网格

点、线、面、体  都是几何图所以有GeometryModel3D:3d几何模型

在3维坐标(网格)画几何图:MeshGeometry3D:网格几何

        Positions:图型顶点在三维坐标的位置

        TriangleIndices:三角坐标索引

 

WPF采用三角网格法,在三维空间中,一个面是有正反之分的。WPF只会渲染“正面”,“反面”是看不见的,

此时

        正面TriangleIndices="0,3,1  1,3,2"

        反面TriangleIndices="0,1,3  1,2,3"    把相机位置移到后面,相机方向反过来才能看到

        GeometryModel3D.Material:几何图的材质,对应2D的背景

旋转 

例如

 <ModelVisual3D.Transform>
      <Transform3DGroup>    
           <RotateTransform3D CenterX="0" CenterY="0" CenterZ="0">
                 <RotateTransform3D.Rotation>
                     <AxisAngleRotation3D Axis="0,1,0" Angle="90"/>
                 </RotateTransform3D.Rotation>
            </RotateTransform3D>
       </Transform3DGroup>
 </ModelVisual3D.Transform>

改变<AxisAngleRotation3D Axis="0,1,0" Angle="20"/>    Angle值,以Y轴(Axis="0,1,0")为中心旋转

完整示例

<Viewport3D Grid.Column="0"  Height="50" Width="5">
            <!--相机-->
            <Viewport3D.Camera>
                <PerspectiveCamera Position="0.5,0.5,0.5" LookDirection="0,0,-0.5" UpDirection="0,1,0" FieldOfView="90"/>
            </Viewport3D.Camera>
            <!--灯光-->
            <ModelVisual3D>
                <ModelVisual3D.Content>
                    <AmbientLight Color="White"/>
                </ModelVisual3D.Content>
            </ModelVisual3D>

            <ModelVisual3D>
                <ModelVisual3D.Content>
                    <!--3D模型组-->
                    <Model3DGroup>

                        <GeometryModel3D>
                            <!--几何图型-->
                            <GeometryModel3D.Geometry>
                                <!--什么几何图型? 网格几何图型-->
                                <MeshGeometry3D Positions=" 0,0,0 0,1,0 1,1,0 1,0,0" TriangleIndices="0,3,1  1,3,2"/>
                            </GeometryModel3D.Geometry>
                            <GeometryModel3D.Material>
                                <DiffuseMaterial Brush="Blue"/>
                            </GeometryModel3D.Material>
                        </GeometryModel3D>
                    </Model3DGroup>
                </ModelVisual3D.Content>
                <ModelVisual3D.Transform>
                    <RotateTransform3D CenterX="0" CenterY="0" CenterZ="0">
                        <RotateTransform3D.Rotation>
                            <AxisAngleRotation3D Axis="0,1,0" Angle="20"/>
                        </RotateTransform3D.Rotation>
                    </RotateTransform3D>
                </ModelVisual3D.Transform>
            </ModelVisual3D>
        </Viewport3D>

了解完以上基础后就可以做一些简单的东西了

简单的东西可以在XAML中画出来,复杂的一般用代码通过一些小几何算法帮我们生成

3D旋转轮播图效果 可操控面板

我主要是通过将圆柱变成圆内切多边形住体,然后在各个面用Viewport2DVisual3D做2D面板

效果图如下:

                                                                         主体介绍        

                                                                         外视角图

                                                                         内视角图

完整实例连接

https://download.csdn.net/download/tm12319/75099388

标签:轮播,相机,坐标,几何,WPF,Viewport3D,3D
来源: https://blog.csdn.net/tm12319/article/details/122395926

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有