網格的學習—4

  前面講到怎麼去繪製一個三角形,從而延伸到一個四邊形,繼而就可以繪製一個6面體。這節我們講一個麻煩點的,這節我們給出一組頂點,然後繪製出多邊形。例如如何繪製一個六邊形。繪製不同形狀的圖形,繪製2D曲面地形。我們知道要繪製一個多邊形首先按照順序添加點,然後給出每個頂點在一個三角形中的繪製順序即可,其中最重要的就是給出繪製順序,繪製順序是每3個一組,即繪製一個三角形對應一組。那麼問題來了 怎麼得到三角形的繪製順序呢?下面給出2種頂點添加順序如下圖:


第一幅圖 我們看到他的頂點添加順序是順時針,當我們繪製0 -1- 2這3個頂點時,0頂點的繪製順序是0,1頂點的繪製順序是1,2頂點的繪製順序是2,這是理所當然的。這是我們所看到的,但是計算機不知道啊,因爲我們知道只有頂點的繪製順序爲順時針的時候纔可以繪製出來,如果爲逆時針那就剔除。

第二幅圖 我們看到他的頂點添加順序是逆時針,當我們繪製0 - 1 - 2這3個頂點時,如果我們繼續按照0頂點的繪製順序是0,1頂點的繪製順序是1,2頂點的繪製順序是2。我們發現這個繪製順序是逆時針的,結果是我們根本就不可能看到一個三角形。所以對於同一組頂點,添加順序不同,那麼得到頂點的繪製順序結果也不同。

這裏我們採用一種最容易理解的辦法,就是把頂點添加順序強制爲順時針(統一爲逆時針也是可以的),接下來我們來模擬一下得到三角形的繪製順序,我們以順時針來講,首先我們先得到0頂點 1頂點 2頂點,如果1_0向量(1_0代表1頂點減去0頂點,就是由0頂點指向1頂點)和2_1向量叉乘,叉乘得到的是一個向量,這裏我們只取它的值。如果他們叉乘爲負的時候,說明我們要把它繪製出來,即依次給出頂點的繪製順序,就是 0,1,2。當我們繪製出0,1,   2這三個頂點組成的三角形時,那麼就從整個頂點數組中把三個頂點中中間的頂點去掉,那麼我們下次就訪問0 ,2,3這三個頂點,如果能繪製的話,我們繼續去掉2這個節點,如果不行的話,我們從3這個頂點繼續找後面連續的其他的2個頂點,依次類推直到剩下2個頂點爲止,接下來我們舉一個凹多邊形的例子,再來推理一遍

首先我們按0,1,2這3個頂點考試討論,因爲1_0向量和2_1向量的叉乘的值是爲正的,所以我們不應該繪製(如果點添加順序爲逆時針的時候,2向量叉乘爲負的,我們不應該繪製,這裏應該還蠻好的理解的吧),0,1,2構成不了三角形,那麼我們接下來訪問1,2,3,這3個頂點時可以繪製出三角形。然後去掉2這個頂點,接下來我們訪問3,4,0這三個頂點,這3個頂點同樣也可以繪製出來,然後去掉4這個頂點,然後接下來就訪問0,1,3了結果同樣可以繪製出來,去掉1這個頂點,所以剩下2個頂點了,最後就得出了所有三角形的繪製順序了,這一節估計呀講不完了,我們還是先討論一下怎麼判斷添加的點事順時針還是逆時針,下節再繼續討論主要算法。其實判斷順時針也是用到也是叉乘,至於爲什麼用叉乘其實也蠻好理解的,因爲叉乘得到的垂直於當前2個向量的法向量。如果(i+1)-i向量和(i+2)-(i+1)向量叉乘的和(這裏叉乘我們只取值,至於叉乘只取值我就不講了這個應該蠻簡單的)加起來如果爲正,即右手定則爲正即朝上的向量,也就是順時針。反之就是逆時針了。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章