繁体   English   中英

Opengl片段着色器第二种颜色

[英]Opengl fragment shader second color

我有片段着色器的问题,我想得到一个效果,其中两个不同的对象用不同的光照亮。 这是我的主要代码:

glUniform1i(TextureID, 0);
glActiveTexture(GL_TEXTURE1);
glBindTexture(GL_TEXTURE_2D, depthTexture);
glUniform1i(ShadowMapID, 1);
//Here I draw my first object
//Then I want to change light from my fragment shader to color2.

我的片段着色器:

      // Ouput data
       layout(location = 0) out vec3 color;
       layout(location = 1) out vec3 color2; 
       void main(){
       //Here I calculate my color variables
       }

我不知道如何实现这种效果。 我必须写第二个碎片器吗? 有必要吗?

不完全的。

想想片段着色器是什么; 它会针对屏幕上的每个像素运行。 因此,它通常具有一个颜色输出,表示所述像素的值。 片段着色器的多个输出用于诸如MRT(多渲染目标)的高级技术中,以避免不必要的几何计算。

如果要更改调用之间的灯光值,只需更改着色器制服,然后再次执行drawcall。 另一种类似的解决方案是使用UBO。

如果您在逻辑上有根本性的改变,则必须编写不同的着色器; 否则,它们通常足以使数据绑定的修改足够用于更换灯光之类的东西。 (但改变灯的数量是另一回事)。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM