2013-12-23 106 views
0

我喜歡在頂點着色器中生成平坦的着色三角形標準。爲此,我需要訪問當前頂點着色器中的兩個下一個頂點屬性。顯然這可以通過幾何着色器來完成,但這些不在GL ES中存在。OpenGL重疊頂點屬性

那麼有什麼辦法可以讓GLSL訪問三個連續的頂點位置,但只能在每個頂點調用中前進一個位置?否則,我將不得不將三個頂點的數據分配給每個頂點。

+0

爲什麼不預先計算正常/顏色,並將其存儲在緩衝區以及頂點? – Vallentin

+0

我不喜歡存儲所有可以通過三角形頂點位置輕鬆獲得的法線......即使我存儲它們,我也只有三個頂點的法線,所以如何訪問它們3次?同樣的問題... – dronus

回答

0

在頂點着色器中不可能訪問多個頂點。如果要創建平面着色,則需要複製頂點,以便爲每個需要的曲面法線提供單獨的頂點副本(每個面共享該頂點位置一個頂點)。這可能是您需要OpenGL ES的解決方案。

或者,如果您的目標是OpenGL 4.x,則可以使用provoking vertex的概念,該概念允許您指定一個頂點,以便在面的所有頂點上重新使用這些頂點。受影響的屬性只是在着色器源代碼中與flat關鍵字相關聯的屬性。

+0

這並沒有解決我的主要問題,我不喜歡正常的頂點數據包含在內。因爲如果多於一個頂點可用,它很容易計算,所以我認爲它應該是可能的。但是,似乎需要幾何着色器。 – dronus

+0

如果使用'glVertexAttribPointer'三次,使用一個太小的'stride'和三個不同的偏移量,則每個綁定屬性會給出序列中的不同頂點。但是,爲了獲得按照基元分組的數據,需要獲得一系列五個頂點,並通過我猜想的基元ID選擇正確的一個頂點。問題是,如果這得到了優化,或者創建五倍帶寬需要一個頂點飼料...當然,它不必這樣做... – dronus

+0

我認爲你是誤解。我建議的解決方案是停止嘗試優化緩衝區中頂點的數量。如果您有一個邏輯頂點出現在N個面中,每個面都有不同的曲面法線,那麼頂點位置應該出現在您的位置緩衝區N次,其他緩衝區具有相應的顏色/曲面法線/無論在給定的位置指數。 – Jherico