[英]Why do I have to switch Texture Unit in order for my Fragment Shader to recognize which texture to use?
[英]1. Do i have to use a draw function for every shader? 2. Do I need a different shader for every different texture I want to draw?
努力學習openGL。 我想在單個 VAO 中使用相同的着色器繪制多個模型,但每個模型都有不同的紋理,這可能嗎?
如果不是這樣,它就不是很實用,因為我必須為我想使用的每個紋理編譯一個不同的着色器,並且它會有相同的代碼讓我的胃轉動,或者更改紋理並調用繪圖 function每次都讓我更惡心xd。
而且我也一直在網上尋找,我找不到任何人一次繪制多個着色器function,他們使用(useProgram(program)),然后繪制VAO,所以你需要為每個不同的VAO着色器?
我將 VAO 用於僅用於頂點格式的位置。 我希望你明白我的意思,我很擅長表達自己。
着色器就像 VAO、VBO 等。 您有一個着色器 ID,綁定該着色器,然后進行繪圖調用。 然后,您可以綁定另一個着色器,進行另一個繪制調用,等等。 所有這些都在同一張畫中 function。
當然,紋理或多或少是相同的。 每個紋理也有一個 ID,因此您可以將它們綁定和取消綁定到 select 使用哪個紋理單元。
原則上,您需要綁定數據(VAO)、紋理和着色器。 您可以任意組合使用它們。
VAO 保存有關如何將存儲在緩沖區中的數據傳遞給着色器的信息(它保存它的“內存布局”)。 您可以將多個對象存儲在一個 VAO 中,或者為每個 object 創建一個 VAO。
着色器和 VAO 之間沒有直接耦合。
使用glUseProgram
表示應該使用哪個着色器程序進行繪圖,使用glBindVertexArray
表示應該使用哪個 VAO 將數據傳遞給着色器程序,在設置好組合后,您將發出繪圖命令。
您可以使用不同的着色器在 VAO 上繪制,或者使用一個着色器來繪制不同的 VAO,或者使用相同或不同的着色器多次繪制一個 VAO。
但是對於每個 VAO Shader 組合,您需要發出繪制命令。
在每次繪制之前,您可以更改着色器應使用的制服和/或紋理。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.