WPF 3D开发教程(三)

原文:WPF 3D开发教程(三)

三、3D模型

3D模型就是物体,是3D开发中的主角。我们在第一部分提过,使用三角网格法表示面。而三角形由顶点组成,每个面又有一定的材质,这些都是怎么表示的呢?三角形面由Positions和TriangleIndices两个属性确定,而材质的显示主要由TextureCoordinates和Material两个属性确定。我们具体解释一下这些属性。

3.1 Positions和TriangleIndices

我们举一个简单的例子说明问题。假设我们要表示如下一个平面:

这是一个矩形,我们最少用两个三角形去表示它。不失一般性,可以用<P0,P3,P1>和<P0,P2,P3>两个三角形表示这个矩形。Positions是一个Point3D结构的列表,在XAML里面,用一串字符串表示这个列表,形式为:"x1,y1,z1 x2,y2,z2……"。上述两个三角形合并到一个字符串里,就有6个点,即:"0,2,0 1,0,0 1,2,0    0,2,0 0,0,0 1,0,0"。

上述的表示方法,似乎已经把这个面表示出来了。那TriangleIndices是干什么的呢?它是一个Positions索引的列表,如:"0 1 2 3 4 5",其表示,Positions[0]、Positions[1]、Positions[2]组成一个三角形,Positions[3]、Positions[4]、Positions[5]组成另一个三角形。

乍一看,似乎TriangleIndices是多余的,其实不然。我们可以发现,P0、P3在两个三角形里面都出现了,对于复杂的3D模型,共用点的情况更多。那么,存储这么多重复的点,是不是会浪费空间呢?当然。所以,对于上述平面,Positions记录4个点就可以了:"0,2,0 1,2,0 1,0,0 0,0,0"。

可这样一来,究竟是哪些点组成一个三角形呢?终于到TriangleIndices发挥作用的时候了。两个三角形,就会有6个点,它的内容为:"0,2,3 0,3,1"。

3.2 TextureCoordinates和Material

Material比较好理解,它可以是纯颜色、渐变颜色、图片等,就像平面绘图里的SolidColorBrush、LinearGradientBrush、ImageBrush。

TextureCoordinates用于描述材质如何贴在平面上。材质是用一个矩形去描述的,假设我们有如下一个图片材质:

但我们的面都是由三角形组成的,一个矩形怎么映射到一个三角形呢?

TextureCoordinates是一个二维点的列表,列表长度跟Positions一致。二维点的取值是0-1,代表了在材质矩形中的位置。例如(0,0)表示材质矩形的左上角,(0,5,0,5)表示矩形的中心。

假设有一个三角形的TextureCoordinates为(0.2,0 0,1 1,1),则其表示一个三角形截取了以下区域:

然后这个三角形变形到真实的形状,即为渲染后的效果:

原文地址:https://www.cnblogs.com/lonelyxmas/p/12208785.html

时间: 2024-10-25 19:15:19

WPF 3D开发教程(三)的相关文章

WPF 3D开发教程(一)

原文:WPF 3D开发教程(一) 一.3D基础知识 1.1 坐标系 我们知道,在2D平面绘图时,WPF使用的坐标系(其实计算机上的图形处理一般都是这样)是以屏幕左上角为原点,向右为x轴正方向,向下为y轴正方向.而WPF的3D坐标系,取区域中心为原点,向右为x轴正方向,向上为y轴正方向,z轴正方向垂直于屏幕指向我们. 这是一个右手系,读者可以伸出自己的右手,做下图所示动作.拇指.食指.中指分别代表x.y.z轴. 1.2 3D世界的元素 事实上,电脑屏幕是一个2D平面,3D物体要在此平面中显示,需要

WPF 3D开发教程(二)

原文:WPF 3D开发教程(二) 二.相机.光源 2.1 相机和投影 我们一般会用到两种相机,PerspectiveCamera和OrthographicCamera. PerspectiveCamera:透视投影相机,更符合世界实际. OrthographicCamera:正投影相机,不会出现近大远小的效果. 更常用的是PerspectiveCamera,所以我们主要介绍这种相机的属性. 相机有三个重要属性,我们一般是要设置好的. LookDirection:相机镜头朝向. UpDirecti

C#WPF 语音开发教程 源代码下载 csdn tts(text to sound) 一步一步 教你制作语音软件 附图和源代码

C#WPF  语音开发教程  一步一步 教你制作语音软件 附图和源代码 效果展示 一 项目准备 1.vs2012开发平台 2.微软的语音软件库 下载:http://download.csdn.net/detail/wyx100/8431269 (含实例项目源代码) 二.开发目标 制作一个语音软件,可以朗读文字: 多个语音库:男音和女音.支持英文和中文朗读: 支持选择播放设备 支持朗读语速选择 支持音量选择 三 开发过程 1.新建WpfSpeechDemo工程 文件(vs开发平台左上角)----新

微信开放平台 公众号第三方平台开发 教程三 一键登录授权给第三方平台

原文:微信开放平台 公众号第三方平台开发 教程三 一键登录授权给第三方平台 教程导航: 微信开放平台 公众号第三方平台开发 教程一 平台介绍 微信开放平台 公众号第三方平台开发 教程二 创建公众号第三方平台 微信开放平台 公众号第三方平台开发 教程三 一键登录授权给第三方平台 微信开放平台 公众号第三方平台开发 教程四 代公众号调用接口的SDK和demo 公众号第三方平台的开放,是为了让公众号运营者,在面向垂直行业需求时,可以一键登录授权给第三方的公众号运营平台,通过第三方开发者提供的公众号第三

libgdx游戏引擎3D开发教程-第一章-基础教程

开卷语:我最近才开始学习游戏编程,因为想做个网游玩,所以前几天找了不少引擎来看,于是不出意料的选中了libgdx,值得感谢的是libgdx的文档很多很全,所以没有走多少弯路就成功的配置好了环境.基础教程很完善,好多大神都已经写的很详细了,但是3D方面的很少见,所以我正好要学,索性直接翻译过来,大家共同进步.注意:教程基本是从Wiki上翻译过来,外加自己的小部分理解,所以一般来说应该没什么问题,如有错误请多多指教. =========================================

WPF工具开发: 第三库选择

PropertyGrid Winforms's PropertyGrid 非WPF原生支持, 需要借助WinFormHost 风格不可定制 PropertyInspectorView 算是"官方"库, 风格不可定制 WPF Property Grid 开源 功能还不够完善 可以定制风格 PropertyEditor for WPF 开源 功能比较实用, 有自己的特色 Actipro PropertyGrid 商业控件 Mindscape WPF Property Grid 商业控件 D

XAF应用开发教程(三)业务对象模型之引用类型与关联关系

本节介绍信息系统开发中最常见的问题,引用关系,一对多关系,多对多关系. 以客户信息为例,客户通常需要客户分类,如VIP客户,普通客户,潜在客户.当然,我们可以定义枚举类型进行定义出这个类型,并在客户类上面定义对应的属性. 但枚举类型增加值需要修改程序,而客户分类很可能是会增加或是修改的,此时,我们就需要用到了引用类型.引用类型对应到数据库上,也就是外键关系. 既然是需要可以维护的客户分类,那么我们应该建立一张表出来,在XPO中就要新建出一个业务类,代码如下: [DefaultClassOptio

15个WPF项目例子+WPF经典开发教程0

摘要:有人推崇产品,有人推崇运营,也有人推崇战略-到底该推崇什么?李智勇系统地分析了这三者之间的思路,并引用黑格尔的一句话,给出了自己的看法:在尺度中已经蕴含本质,这在产品.运营.战略的侧重上体现的非常好. 视野不拉升或者认知不深入时,就容易在盲人摸象层面上反复,看到微信火了,那就产品最重要,看到阿里火了,那就平台最重要.实际上一个比较显然的事实是,没有锥子一样的产品,那你就火不起来:不能从产品升级为平台,那就很可能活不下去.当然,有些人会说平台也是一种产品,但就和人与猴子都是灵长目,实际上仍是

公众号第三方平台开发 教程三 微信公众号授权第三方平台

这一部分挺简单的,其实就是在页面上放一个链接,引导用户跳转即可 链接的格式如下: https://mp.weixin.qq.com/cgi-bin/componentloginpage?component_appid=xxxx&pre_auth_code=xxxxx&redirect_uri=xxxx, 这里对参数做一下说明 component_appid即第三方平台的APPID(如下图) pre_auth_code为预授权码,用获得的第三方平台AccessToken作为参数进行获取,具体