原文: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三维图形的更多相关文章

  1. 【WPF】用三角形网格构建三维图形

    虽然WPF只能支持部分三维模型,不过从应用功能开发的角度看,也已经够用了(非游戏开发).WPF 的三维图形,说得简单一点,也就两种而已. 1.把二维对象放到三维空间中,这个应该较为好办,像 Image ...

  2. matlab绘制三维图形

    原文地址:种三维曲面图. 程序如下: [x,y]=meshgrid(-8:0.5:8); z=sin(sqrt(x.^2+y.^2))./sqrt(x.^2+y.^2+eps); subplot(2, ...

  3. Matlab绘图基础——其他三维图形(绘制填充的五角星)

    其他三维图形 %绘制魔方阵的三维条形图 subplot(2,2,1); bar3(magic(4));   %以三维杆图形式绘制曲线y=2sin(x) subplot(2,2,2); y=2*sin( ...

  4. [Matlab绘图][三维图形][三维曲线基本函数+三维曲面+其他三维图形]

    1.绘制三维图形的基本函数 最基本的三维绘图函数为plot3: plot3与plot用法十分相似,调用格式: plot(x1,y1,z1,选项1,x2,y2,z2,选项2,...,xn,yn,zn,选 ...

  5. 给WPF示例图形加上方便查看大小的格子之完善版本

    原文:给WPF示例图形加上方便查看大小的格子之完善版本 去年10月份, 我曾写过一篇"给WPF示例图形加上方便查看大小的格子"的BLOG(http://blog.csdn.net/ ...

  6. 给WPF示例图形加上方便查看大小的格子

    原文:给WPF示例图形加上方便查看大小的格子 有时,我们为了方便查看WPF图形的样式及比例等,需要一些辅助性的格线,置于图形.图像的背景中. 比如下图,就是为了更清晰地查看折线的图形,我们画了用于标示 ...

  7. matlab中画三维图形

    这里主要讲述两个方法用matlab画三维图形: 1.mesh函数 先看一个简单的例子: x = ::; y = ::; [X, Y] = meshgrid(x, y); Z = zeros(,); Z ...

  8. CVPR2020:点云分析中三维图形卷积网络中可变形核的学习

    CVPR2020:点云分析中三维图形卷积网络中可变形核的学习 Convolution in the Cloud: Learning Deformable Kernels in 3D Graph Con ...

  9. wpf——三维学习1

    以下xmal是我从msdn上复制下来的.是用于在wpf中创建3d模型的实例链接https://msdn.microsoft.com/zh-cn/library/ms747437.aspx看它的使用方式 ...

随机推荐

  1. Strut2与Hibernate的一个web分页功能

    代码没有进行过多的封装,可能看起来有点action代码部分,hibernate在这里只起到了一个查询记录集的作用. import java.util.ArrayList; import java.ut ...

  2. 在Eclipse上打包并使用Proguard工具混淆jar包

    近期由于工作须要,学习到了Android jar包的打包与混淆. 之前觉得还是非常easy的,可是自己深入研究下,发现还是有一些东西须要注意的,并且自己也踩了一些坑,在这里写下供同僚们借鉴借鉴. 转载 ...

  3. JS调用ATL COM中的C++接口的做法

    作者:朱金灿 来源:http://blog.csdn.net/clever101 首先创建一个ATL COM对象,其过程参考下面文章: C#调用ATLCOM 其实给COM对象添加方法和属性可以不用界面 ...

  4. Lucene + Pinyin4J 提供首字母搜索(——)

    遇到一个集团需求,要求在地址查询时候提供拼音搜索,第一反应应该不难,不过实现过程中却一波三折. 1.第一步是讲字段首字母进行索引,具体可以使用Pinyin4j提供的方法完成. 2.原来系统用的luce ...

  5. iOS 简单的描述KVO使用

    // //  ViewController.m //  KVOtest // //  Created by Mac on 15/10/17. //  Copyright © 2015年 聂小波. Al ...

  6. Erlang 日期和时间处理、时间戳转换

    http://www.csdn 123.com/html/blogs/20131113/95993.htm 获取当前时间 erlang:now()得到的是从1970年1月1日零时起,到现在经过的时间, ...

  7. layer弹框在实际项目中的一些应用

    官方介绍:layer至今仍作为layui的代表作,受众广泛并非偶然,而是这五年多的坚持,不断完善和维护.不断建设和提升社区服务,使得猿们纷纷自发传播,乃至于成为今天的Layui最强劲的源动力.目前,l ...

  8. 【b501】谁拿了最多的奖学金

    Time Limit: 1 second Memory Limit: 50 MB [问题描述] 某校的惯例是在每学期的期末考试之后发放奖学金.发放的奖学金共有五种,获取的条件各自不同:1) 院士奖学金 ...

  9. 【CTO俱乐部研修班开课】看板先驱David J. Anderson:看板核心在于创造一种能力——提升敏捷性

    看板开发方法是近年来最热门的敏捷和精益开发方法.看板之父David J. Anderson觉得其核心在于帮助企业创造一种能力--提升敏捷性.CTO俱乐部看板研修班将通过理论.沙盘模拟.真实案例分享等阐 ...

  10. 【BZOJ 1024】 [SCOI2009]生日快乐

    [题目链接]:http://www.lydsy.com/JudgeOnline/problem.php?id=1024 [题意] [题解] 要求恰好分成n个部分;每个部分的面积都一样; 则dfs的时候 ...