簡體   English   中英

1. 我必須為每個着色器使用繪圖 function 嗎? 2. 對於我想要繪制的每個不同紋理,我是否需要不同的着色器?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM