2017-02-26 40 views
-2

在OpenGL中繪製實例時,屬性除數只能設置爲255作爲最大值,因此要將大網格物體分離爲多個實例。我需要更多地瞭解OpenGL中的除數,最大限制取決於驅動程序/ GPU還是每個設備上總是255?OpenGL屬性除數的最大值

+0

該規範沒有提到最大值,所以我想每個適合GLuint的值都是有效的。這可能是驅動程序或代碼中的錯誤。請顯示代碼。 – ybungalobill

+0

我知道實例化以及divisor如何幫助我遍歷vertex_buffer_object上的數據。當我想要將一個變換傳遞給每個n實例(n從1到255)時它工作正常,但是當我想要將一個變換傳遞給更多的256個實例時,它會呈現爲屏幕中的噪聲扇。 – Manh

+0

這聽起來像是代碼中的錯誤,就好像你在某處使用了錯誤的數據類型。 – ybungalobill

回答

1

您誤會了divisor and instance arrays的工作原理。

實例化意味着多次渲染相同的網格,提供不同的每實例數據,如變換等等。實例數組是提供每個實例數據的一種方式。

除數不是頂點數的除數。它是實例計數的除數。因此,如果您使用instanced rendering,它實際上只會有用。

如果除數爲零,則不會爲該屬性發生實例化。如果除數爲1,則實例內的所有頂點的屬性將相同,但下一個實例將獲得下一個值。如果除數是2,那麼前兩個實例會得到相同的值,但接下來的兩個會得到不同的值。等等。

除非你正在做一些非常特殊的實例化,否則你的除數應該是0或1.它不應該基於頂點數。

+0

有320個三角形,我可以在同一個VAO中組合很多不同的模型,我看到的好處是我可以管理這些模型的頂點,正常,顏色,這意味着我可以通過一個或多個實例幾個繪製調用和低傳輸數據到GPU的開銷。 – Manh

+0

@Manh:我無法破譯你在說什麼。您聽起來像是通過單個實例化繪製調用渲染多個*不同*模型,而不是在不同地方使用相同的模型。但那是*不可能*。所以要麼你不正確地解釋你在做什麼,要麼你沒有做你認爲你在做的事。 –

+0

我使它成爲可能。我所做的是看到具有80個三角形的模型與具有100個或120個三角形的模型相同... – Manh

相關問題