WPF三维图形
原文:WPF三维图形
wpf 三维图形基础
生成三维图形的基本思想是能得到一个物体的三维立体模型(model)。由于我们的屏幕只有二维,因而我们定义了一个用于给物体拍照的照相机(Camera)。拍到的照片其实是物体到一个平坦表面的投影。这个投影由3D渲染引擎渲染成位图。引擎通过计算所有光源对3D空间中物体的投影面反射的光量,来决定位图中每个像素点的颜色。
物体的每一个表面都有一种材质(material)和一个画刷(brush)。材质定义了一个具体角度的光的反射量,而画刷定义了表面的颜色。画刷可以是一种单纯的颜色,也可以是渐变的,甚至可以是一幅图片,这些称为纹理(texture)。
一个三角形的世界
在3D图形的世界里,所有物体都被描述成为一系列三角形的集合。可为什么是三角形呢?这是因为三角形是用来描述平面最小的几何体。在场景中,渲染引擎可以计算出每一个三角形的颜色,取决于它的材质和它与光线的角度。
假如我们用矩形来构建我们这个世界,并且这些点不一定在同一平面上,这种表面计算和渲染起来将会变得更复杂。
3D物体的一个表面称为一个网格(mesh)。一个网格被定义为许多3D点。这些点成为顶点(vertices)。这些顶点通过环绕方式连接起来来形成三角形。每一个三角形有个正面和反面,只有正面才会被渲染。三角形的正面可以通过点的环绕顺序来确定。WPF采用逆时针的环绕方式。你可以通过一个简单的“ 右手定则”来帮助记忆。也就是说,如果合上你的右手并且竖起大拇指,让你的四指顺着逆时针方向,那么大拇指指示方向便是三角形的正面。

右手坐标系系统
WPF 采用右手坐标系系统。也就是说,如果你伸出你的手指如下图所示,各手指指示的是三条坐标轴的正向。
3D场景中的元素
1.Viewport3D
这个viewport是建立连接2D和3D世界大门的一个控件。
2.Camera
每一个3D场景都有一个摄像机。摄像机定义了Position,LookDirection和UpDirection属性。WPF支持正交(orthographical )和透视(perspective )摄像机。
3.3D Models
一个3D模型定义了场景中的一个物体。它包含一个Geometry对象 ,这个对象是一个网格,和一个材质(Material )对象,材质具有漫反射(diffuse),镜面(specular )或放射(emmisive )几种类型。材质本身具有一个画刷。
4.Lights
没有光源你将什么也看不到。因此我们需要在我们的场景当中至少放置一个光源来照亮我们的模型。WPF支持各种不同的光源,比如:
AmbientLight (自然光)
DirectionalLight (方向光)
PointLight (点光源)
SpotLight (聚光源)
Hello 3D-World – 一个简单的立方体
WPF三维图形的更多相关文章
- 【WPF】用三角形网格构建三维图形
虽然WPF只能支持部分三维模型,不过从应用功能开发的角度看,也已经够用了(非游戏开发).WPF 的三维图形,说得简单一点,也就两种而已. 1.把二维对象放到三维空间中,这个应该较为好办,像 Image ...
- matlab绘制三维图形
原文地址:种三维曲面图. 程序如下: [x,y]=meshgrid(-8:0.5:8); z=sin(sqrt(x.^2+y.^2))./sqrt(x.^2+y.^2+eps); subplot(2, ...
- Matlab绘图基础——其他三维图形(绘制填充的五角星)
其他三维图形 %绘制魔方阵的三维条形图 subplot(2,2,1); bar3(magic(4)); %以三维杆图形式绘制曲线y=2sin(x) subplot(2,2,2); y=2*sin( ...
- [Matlab绘图][三维图形][三维曲线基本函数+三维曲面+其他三维图形]
1.绘制三维图形的基本函数 最基本的三维绘图函数为plot3: plot3与plot用法十分相似,调用格式: plot(x1,y1,z1,选项1,x2,y2,z2,选项2,...,xn,yn,zn,选 ...
- 给WPF示例图形加上方便查看大小的格子之完善版本
原文:给WPF示例图形加上方便查看大小的格子之完善版本 去年10月份, 我曾写过一篇"给WPF示例图形加上方便查看大小的格子"的BLOG(http://blog.csdn.net/ ...
- 给WPF示例图形加上方便查看大小的格子
原文:给WPF示例图形加上方便查看大小的格子 有时,我们为了方便查看WPF图形的样式及比例等,需要一些辅助性的格线,置于图形.图像的背景中. 比如下图,就是为了更清晰地查看折线的图形,我们画了用于标示 ...
- matlab中画三维图形
这里主要讲述两个方法用matlab画三维图形: 1.mesh函数 先看一个简单的例子: x = ::; y = ::; [X, Y] = meshgrid(x, y); Z = zeros(,); Z ...
- CVPR2020:点云分析中三维图形卷积网络中可变形核的学习
CVPR2020:点云分析中三维图形卷积网络中可变形核的学习 Convolution in the Cloud: Learning Deformable Kernels in 3D Graph Con ...
- wpf——三维学习1
以下xmal是我从msdn上复制下来的.是用于在wpf中创建3d模型的实例链接https://msdn.microsoft.com/zh-cn/library/ms747437.aspx看它的使用方式 ...
随机推荐
- try~Catch语句中异常的处理过程
[2014/10/12 21:40]文章待续~ 1.函数自身捕获处理异常的情况 以下的样例介绍了try~catch语句中出现异常时语句的运行顺序: package month10; import ja ...
- python 设计模式之 单例模式
单例模式是做为"全局变量"的替代品出现的.所以它具有全局变量的特点:全局可见.贯穿应用程序的整个生命期,保证在程序执行中,某个类仅仅存在一个实例,所以通常不希望类中的构造函数被调用 ...
- Tokumx vs Mongodb
Mongodb是一个文档型nosql数据库 採用C++编写 Mongo DB最大的优势在于全部的数据持久操作都无需开发者手动编写SQL语句,直接调用方法就能够轻松的实现CRUD操作. 非常多人觉得mo ...
- 你的薪水增速跑赢GDP了没
watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvZm9ydW9r/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/d ...
- mysqlbinlog命令使用
常用参数:--start-datetime=datetime 从二进制日志中第1个日期时间等于或晚于datetime参量的事件开始读取.datetime值相对于运行mysqlbinlog的机器上的本地 ...
- [.NET Core 24]把project.json迁移到.csproj
链接:https://blog.jetbrains.com/dotnet/2017/04/04/rider-eap-update-csproj-based-net-core-support-migra ...
- 小强的HTML5移动开发之路(35)——jQuery中的过滤器详解
1.基本过滤选择器 :first :last :not(selector) :selector匹配的节点之外的节点 :even :偶数 :odd :奇数 :eq(index) :gt(index) : ...
- UIPasteboard粘贴板:UIMenuController自定义(三)
这篇咱总结总结自定义剪贴板的使用 其实自定义剪贴板也非常简单,无非是放开响应时间,通过UIMenuController自定义剪贴板,然后就是最关键的实现你所用的copy方法拉. 为了方便实用,我给ce ...
- SpringBoot项目优化和Jvm调优(楼主亲测,真实有效)
项目调优 作为一名工程师,项目调优这事,是必须得熟练掌握的事情. 在SpringBoot项目中,调优主要通过配置文件和配置JVM的参数的方式进行. 在这边有一篇比较好的文章,推荐给大家! Spring ...
- iOS开发 - OC - block的详解 - 基础篇
深入理解oc中的block 苹果在Mac OS X10.6 和iOS 4之后引入了block语法.这一举动对于许多OC使用者的编码风格改变很大.就我本人而言,感觉block用起来还是很爽的,但一直以来 ...