在WPF中3D球的构建算法请参考:

https://www.cnblogs.com/lonelyxmas/p/9844951.html

好玩以及值得借鉴的Demo:   (CSDN下载需要积分,避免你浪费积分,我替你试了)

https://download.csdn.net/download/dreamerde/4661198

运行效果:

https://download.csdn.net/download/yangyisen0713/6867605

运行效果:

上述内容均为其他作者的Demo参考,以便您借鉴。 后续为我的源码实践。

先上我的Demo效果图:

实现原理:

WPF里面的3D物体均是由一个个三角面拼装起来的。网上很多公开的球体构建算法,可以很轻易的获取到。我得到所有3D球构成的顶点(Point3D)后,在球体的外层附件上一层内容即可到达上述gif图的效果。  每一个附加元素的坐标即构建3D球的三维坐标。

如上文,在顶点位置上放5px * 5px的Ellipse即可构建点云,在顶点位置放置ModelVisual3D,材质贴图加载Image,即呈现照片球的效果。

最后给Camera加一个旋转动画。

关键源码:

       private void CreateElementss()
{
Vector3D oVectorCenter = new Vector3D(0, 0, PointRadius); int nImgIndex = -1;
for (int stack = 0; stack <= Stacks; stack++)
{
double phi = Math.PI / 2 - stack * Math.PI / Stacks;
double y = PointRadius * Math.Sin(phi);
double scale = -PointRadius * Math.Cos(phi); for (int slice = 0; slice <= Slices; slice++)
{
double theta = slice * 2 * Math.PI / Slices;
double x = scale * Math.Sin(theta);
double z = scale * Math.Cos(theta); Vector3D oPoint = new Vector3D(x, y, z); InteractiveCustom3DPlane o3DPlane = new InteractiveCustom3DPlane(0.3, 0.24, 0, 0);
o3DPlane.OffsetX = oPoint.X;
o3DPlane.OffsetY = oPoint.Y;
o3DPlane.OffsetZ = oPoint.Z; nImgIndex++;
Border bdr = new Border() { Width = 5, Height = 5 };
bdr.Tag = nImgIndex;
string sImgFile = this.GetImg(nImgIndex);
Image img = new Image();
img.Stretch = Stretch.Fill;
BitmapImage bitmap = new BitmapImage();
bitmap.DecodePixelWidth = 100;
bitmap.DecodePixelHeight = 100;
bitmap.BeginInit();
bitmap.UriSource = new Uri(sImgFile);
bitmap.EndInit();
bdr.MouseLeftButtonUp += Bdr_MouseLeftButtonUp; img.Source = bitmap;
bdr.Child = img;
o3DPlane.Visual = bdr;
this.Mv3dContent.Children.Add(o3DPlane);
}
}
}

  

工具:Visual Studio 2017

工程:WPF C#

源代码下载:

WPF 3D球及进阶玩法的更多相关文章

  1. Python的生成器进阶玩法

    Python的生成器进阶玩法 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.yield的表达式形式 #!/usr/bin/env python #_*_coding:utf-8 ...

  2. PHP进阶玩法

    1. 删除不必要的模块. PHP随带内置的PHP模块.它们对许多任务来说很有用,但是不是每个项目都需要它们.只要输入下面这个命令,就可以查看可用的PHP模块: # php - m  一旦你查看了列表, ...

  3. 超详细的格式化输出(format的基本玩法)

    一.format的基本玩法 一.什么是format format是字符串内嵌(字符串内嵌:字符串中再嵌套字符串,加入双引号或单引号)的一个方法,用于格式化字符串.以大括号{}来标明被替换的字符串 fo ...

  4. 【Python基础】random 的高级玩法

    random 模块的高级玩法 1.python 随机产生姓名 方式一: import random xing = [ '赵', '钱', '孙', '李', '周', '吴', '郑', '王', ' ...

  5. 【转】4G18的低成本NA玩法

    首先是要再次强调一次,4G18的缸径是76MM,冲程是87.5MM.属于典型的长冲程低转发动机! 这种设计的优点是比较适合市区走停的工作状况,省油. 如果要针对改装方案而言因为这种低转时便可输出大扭矩 ...

  6. Chrome 控制台新玩法-向输出到console的文字加样式

    Chrome 控制台新玩法-向输出到console的文字加样式 有兴趣的同学可以文章最后的代码复制贴到控制台玩玩. Go for Code 在正常模式下,一般只能向console 控制台输出简单的文字 ...

  7. WPF 3D model - Sphere, Cone, and Cylinder

    原文:WPF 3D model - Sphere, Cone, and Cylinder   Extending Visual3D - Sphere, Cone, and Cylinder http: ...

  8. [C#] 软硬结合第二篇——酷我音乐盒的逆天玩法

    1.灵感来源: LZ是纯宅男,一天从早上8:00起一直要呆在电脑旁到晚上12:00左右吧~平时也没人来闲聊几句,刷空间暑假也没啥动态,听音乐吧...~有些确实不好听,于是就不得不打断手头的工作去点击下 ...

  9. git分布式版本控制玩法

    git分布式版本控制玩法 Git distributed version control play github的配置安装步骤:1.下载git bash(从http://www.git-scm.com ...

随机推荐

  1. vue中computed(计算属性)和watch在实现父子组件props同步时的实际区分

    vue中computed和watch的对比是一个很有意思的话题. 看过官网教程以后,我们往往更倾向多使用computed.computed优点很多,却在某些时候不太适用. 今天我们就稍微讨论一下,当我 ...

  2. LNMP的搭建 及地址转换

    1.   LNMP 先安装nginx yum -y install gcc openssl-devel pcre-devel wget   http://nginx.org/download/ngin ...

  3. mysql的安装及命令

    1.先检查系统是否装有mysql rpm -qa | grep mysql 2.下载mysql的repo源 wget     http://192.168.130.150/mysql5.7.26/my ...

  4. luogu P1082 同余方程 |扩展欧几里得

    题目描述 求关于 x的同余方程 ax≡1(modb) 的最小正整数解. 输入格式 一行,包含两个正整数 a,ba,b,用一个空格隔开. 输出格式 一个正整数 x,即最小正整数解.输入数据保证一定有解. ...

  5. 使用ASP.NET Core 3.x 构建 RESTful API - 3.3 状态码、错误/故障、ProblemDetails

    HTTP状态码 HTTP状态码会告诉API的消费者以下事情: 请求是否执行成功了 如果请求失败了,那么谁为它负责 HTTP的状态码有很多,但是Web API不一定需要支持所有的状态码.HTTP状态码一 ...

  6. mac office软件的安装与破解

    1.mac  office 软件的安装及破解  http://10176523.cn/archives/29/ 下载后安装  切记不要登录 然后用这个文件 破解

  7. IOS中获取各个文件的目录路径的方法和NSFileManager类

    转自:http://blog.sina.com.cn/s/blog_5fb39f910101di92.html IOS中获取各种文件的目录路径的方法 iphone沙箱模型的有四个文件夹,分别是什么,永 ...

  8. Balls in the Boxes

    Description Mr. Mindless has many balls and many boxes,he wants to put all the balls into some of th ...

  9. LSI系列芯片Raid卡配置方法、管理手册

    说明 本手册适用于LSI芯片Raid卡 包括但不限于Inspur 2008/2108 Raid卡.LSI 9240/9260/9261/ 9271 等Raid卡. 不同型号的Raid卡在某些功能上的支 ...

  10. 从零开始的openGL——四、纹理贴图与n次B样条曲线

    前言 在上篇文章中,介绍了如何加载绘制模型以及鼠标交互的实现,并且遗留了个问题,就是没有模型表面没有纹理,看起来很丑.这篇文章将介绍如何贴纹理,以及曲线的绘制. 纹理贴图 纹理加载 既然是贴图,那首先 ...