WPF 3D: MeshGeometry3D纹理坐标的正确定义

原文 WPF 3D: MeshGeometry3D纹理坐标的正确定义

为了使基于2D的纹理显示在3D对象中,我们必须定义3D Mesh对象的纹理贴图坐标。在WPF中,此项功能则通过MeshGeometry3D.TextureCoordinates属性。

 

2D纹理的对应坐标和WPF的LinearGradientBrush的StartPoint和EndPoint一样。

下图来自MSDN关于LinearGradientBrush的StartPoint的说明:

 (0,0)代表整个图形的左上角,(1,1)则代表右下角。(0,1)则代表左下角……当然单位是相对的,可以用0到1之间的小数来代表中间的相对位置。

 

对于最简单的没有共享顶点的Mesh定义(MeshGeometry3D.Positions属性没有共享点),TextureCoordinates则对应Mesh中的每一个三角形的坐标相对应,当然这个和MeshGeometry3D.TriangleIndices属性定义相关。

比如定义一个简单的3D平面矩形,首先一次根据三角形分布定义MeshGeometry的外壳。此时纹理坐标要根据三角形的分布位置来定义纹理坐标位置,比如第一个点是0, 0, 0,显然对应3D空间内矩形的左下角,那么第一个对应的TextureCoordinates是0 1,以此类推,这样定义好整个平面。

<MeshGeometry3D Positions="0 0 0, 5 5 0, 0 5 0, 0 0 0, 5 0 0, 5 5 0"               TriangleIndices="0 1 2 3 4 5"               TextureCoordinates="0 1, 1 0, 0 0,                                    0 1, 1 1, 1 0"/>

 

最终纹理被正确显示:

时间: 2024-10-26 01:10:20

WPF 3D: MeshGeometry3D纹理坐标的正确定义的相关文章

WPF 3D:简单的Point3D和Vector3D动画创造一个旋转的正方体

原文:WPF 3D:简单的Point3D和Vector3D动画创造一个旋转的正方体 运行结果:   事实上很简单,定义好一个正方体,处理好纹理.关于MeshGeometry3D的正确定义和纹理这里就不多讲了,可以参考我以前写过的一些文章: WPF 3D: MeshGeometry3D纹理坐标的正确定义 WPF 3D:MeshGeometry3D的定义和光照   接下来就是怎样让它动起来.我们通过3D点动画来改变照相机(Camera类型)的位置(Position属性)从而使正方体动起来(这样的话实

WPF 3D:MeshGeometry3D的定义和光照

原文 WPF 3D:MeshGeometry3D的定义和光照 由于WPF计算光照会根据整个平面的方向向量,所以如果在不同面上使用同一个点可能会达到不同的光照效果.让我们用不同的定义Mesh的方法来演示这个问题. 首先要定义两个简单的相交面,为方便定义,整个图形的主视图可以参考下图:   第一个方法就是用最简单的最笨的方法,一次性定义所有的点,这样两个面四个三角形一共12个点,TriangleIndices是从0到11. 如下代码: <MeshGeometry3D Positions="-1

WPF 3D 知识点大全以及实例

原文:WPF 3D 知识点大全以及实例 引言 现在物联网概念这么火,如果监控的信息能够实时在手机的客服端中以3D形式展示给我们,那种体验大家可以发挥自己的想象. 那生活中我们还有很多地方用到这些,如上图所示的Kinect 在医疗上的应用,当然还有体感游戏等等.   3D 用来增加视觉效果,给人以更加直观,真实的感觉. 3D如此美妙,那我们在WPF中又该从何处入手开启我们的3D编程旅程?   WPF中3D开发技术的基础知识应该有以下几点: 3D开发基础知识 WPF中3D开发的基础元素(Elemen

WPF 3D 常用类(1)

原文:WPF 3D 常用类(1) 几何数据相关类 Geometry3D 抽象类, 用于定义物体的几何数据, 可用于计算HitTest和BoundingBox   MeshGeometry3D Geometry3D的子类, 定义网格的顶点, 三角形顶点, 法线, Texture(纹理)的座标 常用属性: Positions, TriangleIndices, Noramls, TextureCoordinates   模型相关类 (模型=几何数据+变形(位置,旋转,尺寸)+材质) Model3D

WPF 3D:使用GeometryModel3D的BackMaterial

原文 WPF 3D:使用GeometryModel3D的BackMaterial 使用BackMaterial,我们可以定义3D物体的内部材质(或者说是背面),比如,我们定义一个四方体容器,外面现实的是普通材质,里面的则是内部材质.比如下图,红色的是内部材质:   GeometryModel3D.BackMaterial默认是null,所以如果不定义他的话,背面的材质是不会显示,上面的程序则会运行成这样:   定义材质很简单,设置GeometryModel3D.Material属性和BackMa

WPF 3D:使用变换中的TranslateTransform3D

原文:WPF 3D:使用变换中的TranslateTransform3D 程序效果:   WPF 3D中的TranslateTransform3D应该是所有3D变换中最简单的变换,使用起来非常简单,先定义好3D对象,接着在适当的位置加入变换就可以了.   当然WPF 3D中变换(Transform3D类型)可以应用在如下属性中: 照相机:Camera类型 3D模型定义:Model3D类型 容纳3D模型的Visual3D:ModelVisual3D类型   对于2D的TranslateTransf

WPF 3D 小小小小引擎 - &amp;#183;WPF 3D变换应用

原文:WPF 3D 小小小小引擎 - ·WPF 3D变换应用         WPF可以提供的3D模型使我们可以轻松地创建3D实体,虽然目前来看还很有一些性能上的问题,不过对于一些简单的3D应用应该是可取的,毕竟其开发效率高,而且也容易上手.         下面给大家演示的是使用在WPF 3D上实现视角变换,通过鼠标拖动来变换观察视角,通过滚轮来放缩视距. 有关3D的基础知识可以参考MSDN文档:三维图形概述             首先创建一个3D立方体,立方体是由六个面构成(F1, F2

3ds文件格式-请教读取3ds文件的纹理坐标的细节

问题描述 请教读取3ds文件的纹理坐标的细节 我想读取3ds文件里的纹理坐标然后进行纹理映射.但是看的一些教程都只是简单地读取,而没有将其和面列表联系起来.按理来说应该有和顶点索引一样的东西,难道纹理坐标也可以通过顶点索引来读取? 另外看了一下CSDN的论坛,里面说不仅要读取0x4140这一部分还要读取其他才能进行纹理映射,请问这是否正确? 还有3ds文件里是否有保存纹理图路径信息,因为我还要从硬盘中读取位图,如果有纹理图路径(绝对相对都可以),这样就方便很多. 解决方案 读取3ds文件读取3D

编程-请教一下关于D3D纹理坐标的问题

问题描述 请教一下关于D3D纹理坐标的问题 请教一下各位大神,用d3d编程的时候创建了纹理,就是游戏的素材. 现在我看到的书就只讲了不改变的纹理坐标的例子.可是读取游戏素材的时候需要改变纹理坐标吧,请问怎么做可以改变纹理坐标?还是说有什么方法可以把一整个拆除一个个小的纹理出来?谢谢啦!