2016-02-19 2 views
0

Извините за плохой титул, но я ничего не мог придумать.GLSL нет цвета при использовании двух входных переменных, умноженных

У меня есть следующий фрагмент кода шейдера:

#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); 
} 

Однако, я не могу за жизнь мне удается совмещать переменное время и любой элемент координат. Он просто становится черным. То есть time * coords [1] никогда не производит никакого цвета, хотя координаты [1] всегда равны 1.0f, и время быстро становится большим.

Редактировать: При загрузке шейдера ошибок не возникает.

+0

Помните, что время, скорее всего, будет больше, чем 1.0f! Но я сомневаюсь, что это не проблема. Вы только спрашиваете о «мерах времени» [1] «здесь, правильно? – fordcars

+0

Что подозрительно, так это то, что неработающий корпус является единственным, в котором действуют обе формы. Лучше дважды проверьте свой единый код настройки. – derhass

ответ

1

В коде:

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

Какой тип значения время? Является ли это значением в реальном времени (т. Е. Целочисленным) из ОС или является вычисленным параметром? Является ли это целочисленным, когда вы устанавливаете униформу? Если это так, значения, выходящие из диапазона единиц измерения (то есть 0.0-1.0), могут иметь непредсказуемые результаты в некоторых аспектах GL-шейдеров. Дважды проверьте значения, которые вы отправляете с помощью glUniform * (Обычно это было проблемой для меня).

Смежные вопросы