WPF 3D球及进阶玩法
在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球及进阶玩法的更多相关文章
- Python的生成器进阶玩法
Python的生成器进阶玩法 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.yield的表达式形式 #!/usr/bin/env python #_*_coding:utf-8 ...
- PHP进阶玩法
1. 删除不必要的模块. PHP随带内置的PHP模块.它们对许多任务来说很有用,但是不是每个项目都需要它们.只要输入下面这个命令,就可以查看可用的PHP模块: # php - m 一旦你查看了列表, ...
- 超详细的格式化输出(format的基本玩法)
一.format的基本玩法 一.什么是format format是字符串内嵌(字符串内嵌:字符串中再嵌套字符串,加入双引号或单引号)的一个方法,用于格式化字符串.以大括号{}来标明被替换的字符串 fo ...
- 【Python基础】random 的高级玩法
random 模块的高级玩法 1.python 随机产生姓名 方式一: import random xing = [ '赵', '钱', '孙', '李', '周', '吴', '郑', '王', ' ...
- 【转】4G18的低成本NA玩法
首先是要再次强调一次,4G18的缸径是76MM,冲程是87.5MM.属于典型的长冲程低转发动机! 这种设计的优点是比较适合市区走停的工作状况,省油. 如果要针对改装方案而言因为这种低转时便可输出大扭矩 ...
- Chrome 控制台新玩法-向输出到console的文字加样式
Chrome 控制台新玩法-向输出到console的文字加样式 有兴趣的同学可以文章最后的代码复制贴到控制台玩玩. Go for Code 在正常模式下,一般只能向console 控制台输出简单的文字 ...
- WPF 3D model - Sphere, Cone, and Cylinder
原文:WPF 3D model - Sphere, Cone, and Cylinder Extending Visual3D - Sphere, Cone, and Cylinder http: ...
- [C#] 软硬结合第二篇——酷我音乐盒的逆天玩法
1.灵感来源: LZ是纯宅男,一天从早上8:00起一直要呆在电脑旁到晚上12:00左右吧~平时也没人来闲聊几句,刷空间暑假也没啥动态,听音乐吧...~有些确实不好听,于是就不得不打断手头的工作去点击下 ...
- git分布式版本控制玩法
git分布式版本控制玩法 Git distributed version control play github的配置安装步骤:1.下载git bash(从http://www.git-scm.com ...
随机推荐
- Spring 之初识IOC和DI
下载Spring jar包 Spring官网 下载地址 Sping核心jar包 IOC简介 IOC:控制反转,指以前程序自己创建对象,现在将创建对象的控制权交给了第三方(Spring)了 IoC底层实 ...
- shell一键部署nginx+tomcat
1.首先拉取环境 tomcat需要用到jdk环境 提前准备好nginx源码包,放于指定目录下 vim test.sh #!/bin/bash yum -y install gcc gcc-c++ z ...
- MySQL+Keepalived高可用配置
注意:首先关闭两台机器的防火墙 setenforce 0 Environment: 2台CentOS测试机器 安装好MySQL 1.两台机器安装keepalived yum -y install k ...
- PXE+Kickstart网络装机(Centos6.5版本)
1.原理说明: PXE Client:表示需要安装操作系统的机器,统称客户端: TFTP server:表示安装TFTPD服务的机器: DHCP server:表示安装DCHPD服务的机器: 在实际的 ...
- 初次在Vue项目使用TypeScript,需要做什么
前言 总所周知,Vue新版本3.0 使用 TypeScript 开发,让本来就很火的 TypeScript 受到更多人的关注.虽然 TypeScript 在近几年才火,但其实它诞生于2012年10月, ...
- Where/Order by/Ggroup by/Having使用的注意事项
1.Where.Order by.Group by .having Where作用对象是:基本表或视图,从中选出符合条件的元素. Order by 作用对象是:基本表或视图,就是排序方式,分为升序(A ...
- JavaScript 逻辑与(&&) 与 逻辑或(||) 运算规则
逻辑与(&&) 逻辑与(&&)操作可以应用于任何的操作类型,不仅仅是布尔值, 在有一个操作数不是布尔值的情况下,&&操作符就不一定返回布尔值:遵循下面规 ...
- 【算法】272-每周一练 之 数据结构与算法(Dictionary 和 HashTable)
这是第五周的练习题,上周忘记发啦,这周是复习 Dictionary 和 HashTable. 下面是之前分享的链接: [算法]200-每周一练 之 数据结构与算法(Stack) [算法]213-每周一 ...
- 最新115道华为、京东、滴滴、美团精选Java面试题整理
京东面试题 1. 一般sql注入怎么发现触点的,从源码阐述sqlmap如何测试注入点的. 2. masscan扫描端口时靠什么检测,为什么这么快? 请详述. 3. 你写过哪些小工具,你为你使用过的工具 ...
- 70道阿里百度高频Java面试题(框架+JVM+多线程+算法+数据库)
基础与框架 1.String类能被继承吗,为什么 2.String,Stringbuffer,StringBuilder的区别? 3.ArrayList和LinkedList有什么区别 4.类的实例化 ...