天天看點

WPF MeshGeometry3D

原文:

WPF MeshGeometry3D

說說 MeshGeometry3D 裡 常用的 四個屬性。

先看看 MSDN 的 簡介

WPF MeshGeometry3D

先說說 Positions,介紹說 是頂點位置的集合,什麼意思,看張圖檔。

WPF MeshGeometry3D

這張簡單描述了一個三位坐标系,裡面有四個坐标點,也就是頂點位置,都已标出,也就組成了集合(Positions)。

它所标示的是一個正方形,先放在這裡,下面說一下TriangleIndices。

往往分不清 TriangleIndices 和 Positions 的關系。

舉個例子:

TriangleIndices="0 1 2 2 3 0"

它所表示的是什麼。每個數字什麼意思。

先講一下概念,字面意思是三角形索引的集合。為什麼要用到三角形呢,因為在3D圖形的世界裡,所有物體都可以被描述成為一系列三角形的集合。

比如我們現在畫的這個正方形,可以有兩個三角形組成。

那麼TriangleIndices="0 1 2 2 3 0"  按照圖檔顯示的可以翻譯成 “P0 P1 P2,P2 P3 P0”,或者 0 對應 (-1,1,0),1 對應 (-1,-1,0),以此類推。

這裡面的每個數字對應這圖檔裡的每個點。可是為什麼這樣對應呢。

這關系到三角形呈現的是有正反面區分的,可以看出上面每三個點組成的一個三角形都是逆時針順序的,這是因為WPF采用逆時針的環繞方式來顯示正面,

或者用右手定則:握住右手,伸出拇指,四指為逆時針方向,拇指指向正面。

如果你那順序反過來,會顯示一片黑。因為你沒描述背面。

到這裡基本就搞清了TriangleIndices 和 Positions 的關系。

這兩個也是比較主要的屬性,因為另兩個屬性,不寫的話,會自動判斷來給出預設值。

來說說 Normals 和 TextureCoordinates。

TextureCoordinates:紋理坐标用于确定将 

Material

 映射到構成網格的三角形的頂點的方式。 

這個比較好了解,比如

TextureCoordinates="0,0 0,1 1,1 1,0"

一般材質的的正常坐标按照上圖來說順序依次是 P0,P3,P2,P1。也就是說 0,0 0,1 1,1 1,0 這是一個正常順序,是按照本來畫面顯示的。

但如果換成TextureCoordinates="1 0, 0 0, 0 1, 1 1",你會發現顯示的畫面向左倒了。

這也和你定義的坐标集合有關系。

最後是

Normals:法向量是與定義網格的每個三角形的面垂直的向量。 法向量用于确定是否亮顯給定三角形面。如果指定了三角形索引,則将考慮相鄰面來生成法向量。