[转]WPF 3D入门,MeshGeometry3D的Positions、TriangleIndices和TextureCoordinates的简单理解

 转自:http://blog.csdn.net/junwillday/article/details/7862071

MeshGeometry3D类是WPF 3D编程中必不可少的一部分,要想正确的使用这个类,对其常用的Positions、TriangleIndices和TextureCoordinates这三个属性的理解非常重要。

1、Positions

      首先我们要知道,在计算机的3D世界里,所有的图形都是有三角形组成的,比如,一个正方形可以有两个三角形组成,一个立方体可以有12个三角形组成,Positions就是来表示组成3D图形的所有三角形的顶点的。以正方形为例,组成以个正方形需要两个三角形,那就是六个顶点,但是因为这两个三角形共享了一条边,所以只需要四个顶点就可以表示了,假如我们已经确定四个顶点,分别为(-1,-1,0),(1,-1,0),(1,1,0),(-1,1,0),那么相应的Positions就是“-1,-1,0     1,-1,0    1,1,0 -1,1,0”。当然,你也可以选择把六个点都表示出来,这会为你更好渲染你的3D图形留下方便,不过更多的时候,我们还是选择不重复表示那些共享点。

2、TriangleIndices

     TriangleIndices通过将Positions的顶点集合按一定顺序组合起来,组成所需要的三角形。

     以前面已经确定的Positions集合为例,要想用这些点组成两个三角形,我们就需要在TriangleIndices中指出这些点 的排列顺序,在这里,TriangleIndices可以为“0,1,2   2,3,0  ”,这里需要说明的一点是,我们需要按绕Z轴逆时针的顺序来列出这些点,这是3D编程中的一个规则,至于为何这样,呵呵,不好意思,我也不太清楚。

3、TextureCoordinates

      TextureCoordinates定义了如何将一副2D纹理映射到所建立的3D网格上,TextureCoordinates为Positions集合中的每一个3D顶点提供了一个2D顶点。对于TextureCoordinates所提供的2D坐标系的理解,可以参考LinearGradientSBrush中为确定StartPoint和EndPoint所提供的坐标系,都是一个左上角坐标为(0,0),右下角坐标为(1,1)的正方形。

      比如,对上面我们已经确定的Postitions集合,所对应的2D顶点应该是(0,1),(1,1),(1,0),(0,0),所以,TextureCoordinates即为:“0,1  1,1 1,0 0,0”。

      

     这里通过确定一个正方形的MeshGeometry3D,对WPF的MeshGeometry3D的Positions、TriangleIndices和TextureCoordinates属性的作用做了简单解释,相信大家都看出来了,简单的几何图形我们可以手动建模,但对于非常复杂的图形,手动计算那些3D顶点是非常困难,这里我们就需要借助一些3D建模工具了,幸运的是,很多工具建模都支持导出XAML文件。

posted @ 2013-11-12 16:44  jojinshallar  阅读(1963)  评论(3编辑  收藏  举报