当使用两个输入变量相乘时,GLSL没有颜色

时间:2016-02-19 14:47:59

标签: opengl glsl opengl-4

对不好的头衔抱歉,但我无法想出更好的东西。

我有以下片段着色器代码:

#version 430 core
out vec4 color;
uniform vec4 coords; //set to {1.f,1.f,1.f,1.f}
uniform vec3 values; //{time, a, b} 
void main() {
  float time = values[0]; 
  float c;
  c = coords[1]; //green
  c = coords[1]*0.5f; //dark green
  c = sin(time); //works like it should. moves between black and green.
  c = time*1.0f; //quickly becomes green
  c = 1.0f*coords[1]; //green
  c = time*coords[1]; //black.
  color = vec4(0,c,0,1);
}

然而,我无法为我的生活设法将可变时间和任何元素结合在一起。它变成了黑色。即时间* coords [1]永远不会产生任何颜色,即使coords [1]总是1.0f并且时间很快变大。

编辑:加载着色器时没有错误。

1 个答案:

答案 0 :(得分:1)

在您的代码中:

uniform vec3 values; //{time, a, b} 

什么类型的价值是时间?它是来自OS的实时值(即整数),还是计算参数?设置制服时是基于整数吗?如果是这种情况,超出单位范围(即0.0 - 1.0)的值可能会在GL着色器的某些方面产生不可预测的结果。仔细检查您通过glUniform *发送的值(这对我来说通常是问题的根源)。