2013-10-07 62 views
1

據我所知,每個頂點都規定了法線,而在OpenGL中,「頂點」不僅指空間中的一個點,而且也指其相關的法線(以及其他一些數據)。對於諸如立方體等面部呈直角的模型,這將會產生問題,因爲每個幾何頂點需要3個法線,每個面對應一個法線。顯而易見的解決方案似乎是指定4個不同的頂點,每個面都有適當的法線(即不共享面之間的頂點),但這種方法看起來非常浪費。有沒有更好的方法可以讓我在不分享法線的情況下分享頂點位置?在OpenGL中共享頂點位置但不是法線

回答

6

當你寫的,一個頂點位置,法線,紋理座標的全矢量等

如果只有這些屬性的不同,則是一個完全不同的頂點。

但這種方法看起來很浪費。

不同的屬性,不同的頂點。這不是一個難以理解的概念。現代GPU採用頂點緩存,該頂點緩存使用頂點屬性作爲頂點變換階段的緩存輸出中的關鍵。如果屬性共享是可能的,則該緩存不能以有效的方式實現。

是否有更好的方法可以讓我實際上共享頂點位置而不共享法線?

爲什麼要這麼做?具有不同法線的頂點是不同的頂點。試圖節省一點點內存就會打開一大堆蠕蟲。不僅用於緩存,還用於程序的其他部分。

單獨的頂點與單獨的法線實際上是一件好事。

+0

「你爲什麼要那麼做?」 - 我做了一個(天真的)假設,只計算一次頂點位置效率更高,但根據你的帖子,顯然不是。此外,我只是在學習OpenGL,所以對於我的測試程序,我手動指定所有頂點數據,而不是加載模型,這有點令人生畏,所以很自然地我很好奇,並認爲可能有一條捷徑。 – jaymmer