在this tutorial作者通過定義其6個面(6個* 4個頂點),然後講述在每個面三角形webgl的顯示的立方體。WebGL的三角形立方體
這不是浪費嗎?定義8個頂點並告訴webgl如何連接它們以獲得三角形不是更好嗎?多個頂點共享的顏色是否有問題?
爲了讓我的擔心顯而易見的:如果作者定義了指數陣列的三角形,他爲什麼需要這麼多的頂點?他可以指定頂點數組中只有8個頂點的所有三角形。
在this tutorial作者通過定義其6個面(6個* 4個頂點),然後講述在每個面三角形webgl的顯示的立方體。WebGL的三角形立方體
這不是浪費嗎?定義8個頂點並告訴webgl如何連接它們以獲得三角形不是更好嗎?多個頂點共享的顏色是否有問題?
爲了讓我的擔心顯而易見的:如果作者定義了指數陣列的三角形,他爲什麼需要這麼多的頂點?他可以指定頂點數組中只有8個頂點的所有三角形。
這裏的例子的作者。正如您懷疑的那樣,問題在於立方體的着色。
最容易理解這種代碼的方式是想到的WebGL的「頂點」爲在空間不只是簡單的點,但屬性,而不是捆綁。一個特定的頂點可能是包<(1,-1,1),red>。一個不同的頂點在空間中的同一點上,但具有不同的顏色(例如,<(1,-1,1),綠色>)就WebGL而言完全是不同的頂點。
所以,雖然立方體在空間中的點的數學意義上只有8個頂點,但如果您希望每個面具有不同的顏色,那麼每個點必須被三個不同的頂點佔據,每個顏色一個 - 在WebGL意義上使8x3 = 24個頂點。
這不是在內存方面巨大的效率,但相比更加規範化表示需要進行有效處理的CPU功耗內存的便宜。
。希望澄清的事情。
內存很便宜,真實,但增加頂點數增加了處理它們所需的時間(或不是,我不知道GPU如何處理它)。如果我使用像素着色器進行着色,那麼最好只指定8個頂點,對吧? – oOo
GPU按照頂點運行其內存讀取數據頂點 - 也就是說,頂點着色器會針對每個屬性一個接一個地運行。爲了去規範它,你需要一個位置表,然後每個頂點(在WebGL意義上)必須說「我是位置#1,顏色是紅色的」(例如)。這將需要非線性內存讀取(首先讀取其他屬性,包括位置索引,然後讀取位置),這在我們所談論的那種低級圖形硬件中更難實現。 –