![](/img/trans.png)
[英]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.