在背面剔除中,您可以使用臉部法線來查看臉部是否指向遠離相機的位置,如果三角形繪製爲時鐘明智或計數器時鐘明智。什麼是openGL中的順時針臉
我對順時針方向的這種技術感到困惑。對於這種方法來說,發送給顯卡的頂點數據的排序決定了它是朝向還是遠離相機。我不明白這是否合理,因爲相機可以朝任何方向觀看,就好像頂點數據必須根據相機位置改變,這顯然不是在CPU上完成的。
我怎麼理解這個?
在背面剔除中,您可以使用臉部法線來查看臉部是否指向遠離相機的位置,如果三角形繪製爲時鐘明智或計數器時鐘明智。什麼是openGL中的順時針臉
我對順時針方向的這種技術感到困惑。對於這種方法來說,發送給顯卡的頂點數據的排序決定了它是朝向還是遠離相機。我不明白這是否合理,因爲相機可以朝任何方向觀看,就好像頂點數據必須根據相機位置改變,這顯然不是在CPU上完成的。
我怎麼理解這個?
這是從相反側觀看的一個三角形:在三維空間中
3點限定一個三角形。另外,如果這些點是有序的(如這裏),它們也決定了三角形的兩個面(面):順時針和逆時針(它們由放在面內的順序時鐘確定將指向它的頂點)
在上面的例子中的三角形紋理逆時針
現在想象一下,這個三角形是一個骰子的元素:
如果擲骰子(或旋轉攝像頭周圍)我們從CCW三角形會變成CW,我們不希望它再被紋理化。
這個骰子實際上是由12個這樣的三角形構成的,如果我們正確地命令它們,我們將只有6個紋理每次都面對相機。
只是想補充一點,這也被稱爲* chirality *,或者指向性,並且座標系的手徵性也決定了正常點的方向,這取決於您將矢量放置在十字中的順序產品。聲明'a×b = -b×a'總是成立,但翻轉手徵也有同樣的效果。 – datenwolf 2013-02-23 15:02:50
,所以CW或CCW的順序告訴GPU哪一面在前面,但我不明白這是如何實現的,因爲相機的方向決定了面部是朝向還是遠離。 – 2013-02-23 15:05:23
。這是整個觀點。在上面的圖像攝像機的左側是在該三角形的後面,在右側的位置是在它的前面。而你只想紋理一面。 – fsw 2013-02-23 15:09:37
我會告訴你這上一個例子四:
(0,0)-------(1,0)
| |
| X |
| |
(0,1)-------(1,1)
假設我們已開始在(0,0)
。現在,如果您按照「順時針」順序結束(傳遞)頂點,則下一個將是(1,0)
,(1,1)
和(0,1)
。 (1,0)
2點多或少,(1,1)
爲4,依此類推。
因此GPU內存中的數據:0,0, 1,0, 1,1, 0,1
。
當您將發條方向與您的設置相關聯時,您可以輕鬆區分什麼是「前」和「後」 - 想象得更好,您可以將其繪製在透明的物體上,然後從另一側看 - 向上的方向將被顛倒。
因此,卷繞方向的規格僅僅是告訴GPU哪一面是前面,哪一面是背面,因爲它本身無法做到 - 三角形的兩邊同樣好,法向矢量給定的多邊形可以是N
或-N
。但是,GPU可以驗證其中哪些與適當的清盤順序一致。
The (Old) Red Book的第2章有關於OpenGL特定的東西的一些很好的解釋,今天仍然非常相關。
所以CW或CCW的順序告訴GPU哪一面在前面,但我不明白這是如何實現的,因爲相機的方向決定了面部是朝向還是遠離。 – 2013-02-23 15:02:47
這就是要點。如果你從後面「看」臉部,他們可以在繪畫中被忽略,因爲它們肯定會被前臉所遮擋(透明模特是個例外 - 在這種情況下,前臉和後臉都必須是畫)。 – 2013-02-23 15:13:33
這正是關鍵點:頂點順序不必與相機方向最初,當您創建/繪製的臉!請注意,相機僅僅是一種轉換,而不是由openGL本身識別的東西。因此,在渲染時,在通過攝像機「觀察」之後,openGL僅檢查(如果啓用了剔除)臉部頂點的新順序,現在根據新方向(在應用了所有變換之後) ,以顯示臉部或不。
關於數學的相關問題:http://math.stackexchange.com/questions/297588/for-bsp-generation-how-to-intersect-or-locate-a-triangle-with-a-plane-定義-b/297905#297905 – 2013-02-25 17:41:07