![](/img/trans.png)
[英]although doesn't set output color to second output color variable in fragment shader, it still set color to second color output variable (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.