2013-01-24 203 views
0

我正在寫一個骨骼動畫的着色器,需要一個int []屬性來將索引保存到包含關節轉換矩陣的mat4 []。我的問題是,我不能創建一個存儲int []的VBO。我試過使用GL30.glVertexAttribIPointer(),但是,我的電腦不支持Opengl 3.0。所以我不得不使用我讀過的glVertexAttribPointer()將所有的值轉換爲浮點數。在可以通過着色器訪問的VBO中存儲int []的最佳方式是什麼?LWJGL opengl glsl着色器與int []屬性

回答

1

您試圖做什麼有兩個問題。

第一個問題是您正在嘗試傳遞整數。使用花車;使用float作爲數組的索引沒有任何問題。如果您通過GL_FALSE獲得normalized參數glVertexAttribPointer,您將獲得有效整數。您可以將每個索引作爲GL_UNSIGNED_BYTE傳遞。第二個問題是你想傳遞數組。別那樣做;你想要一個vec4,而不是一個數組。 XYZW表示您在矩陣中使用的四個索引。

如果頂點需要多於4個矩陣會怎麼樣?別再那樣做了;這就是其他人都會剝皮的原因。這種工作方式是,當您構建頂點數據時,如果一個頂點受到4個以上矩陣的影響,那麼您只能使用權重最大的4個(相應地重新調整權重)。

+0

使用浮點數來存儲整數不超過2^23,除此之外,兩個相鄰浮點數之間的差值大於1(所以並非所有整數都可以表示爲浮點數)。但我認爲這在這種情況下不會造成任何限制 –