2016-02-19 1 views
0

Désolé pour le mauvais titre, mais je ne pouvais pas trouver mieux.GLSL pas de couleur lors de l'utilisation de deux variables d'entrée multipliées

J'ai le fragment de code shader suivant:

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

Cependant, je ne peux pas pour la vie de me parviennent à combiner le temps variable et tout élément coords. Il devient juste noir. C'est à dire. time * coords [1] ne produit jamais de couleur, même si coords [1] est toujours 1.0f et le temps devient rapidement grand.

Éditer: Il n'y a aucune erreur lors du chargement du matériau.

+0

Gardez à l'esprit le temps sera très probablement plus de 1,0f! Mais je doute que ce soit un problème. Vous ne demandez que les coordonnées de 'time * [1]' ici, n'est-ce pas? – fordcars

+0

Ce qui est suspect, c'est que le cas qui ne fonctionne pas est le seul où les deux uniformes sont actifs. Mieux vérifier votre code de réglage uniforme. – derhass

Répondre

1

Dans votre code:

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

Quel type de valeur est le temps? Est-ce une valeur en temps réel (c'est-à-dire un entier) du système d'exploitation, ou est-ce un paramètre calculé? Est-ce basé sur des entiers lorsque vous définissez l'uniforme? Si tel est le cas, les valeurs qui sortent de la plage d'unités (c'est-à-dire 0,0 à 1,0) peuvent avoir des résultats imprévisibles dans certains aspects des shaders GL. Revérifiez les valeurs que vous envoyez via glUniform * (Cela a généralement été la source de problèmes pour moi).