繁体   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