2017-05-24 3 views
0

Ich habe float brightness mit einer Punktproduktion von 2 Vektoren drin. brightness sollte die meiste Zeit positiv sein, aber um sicherzustellen, dass ich max(brightness, 0.0) verwende. Wenn ich versuche, brightness in meinem Beleuchtungssystem zu verwenden, zeigt nichts auf Anzeige an. Ich habe versucht, dies mit If-Anweisung zu debuggen, aber es scheint, dass es immer wahr oder etwas zurückgibt. So verwirft if(brightness > 99999) und if(brightness < 99999) oder if(brightness == 12345) alles Pixel. Ich verwende GLSL Version 430 Core.GLSL Wenn immer wahr

float brightness = dot(vector1, vector2); 
brightness = max(brightness, 0.0); 

if(brightness < -999) { 

    discard; 

} 

Also in diesem Beispiel^es wird das Pixel verwerfen.

Antwort

0

Wahrscheinlich haben Sie ein NaN in vector1 oder vector2 Komponenten (NaN => keine Zahl, kann passieren, wenn es bei vector1 oder vector2 Berechnungen eine Division durch Null gibt).

Bitte beachten Sie dies für eine Art und Weise NaN zu erkennen: How to deal with NaN or inf in OpenGL ES 2.0 shaders

Also das Problem, das Sie an, wie vector1 & vector2 berechnet werden suchen müssen zu lösen.

Um dies ist ein NaN Problem zu bestätigen, verwenden konstante Werte für vector1/vector2 mögen:

// force values so we are sure dot will be 1.0 
vector1 = vec3(1.0,0.0,0.0); 
vector2 = vec3(1.0,1.0,0.0); 

float brightness = dot(vector1, vector2); 
brightness = max(brightness, 0.0); 

// so this should never execute since dot is 1.0 
if(brightness < -999) { 
    discard; 
} 

Es ist völlig unmöglich, dass die Verwerfungs mit obigem Code ausgeführt werden. Wenn Sie denken, dass dies immer noch geschieht, wäre nur eine andere mögliche Erklärung, dass der Code nach dem if-Test fragColor.rgb auf schwarz oder fragColor.a auf null setzen würde, sodass kein Pixel angezeigt wird, wenn die Überblendung aktiviert ist.

+0

Ich dachte, dass es NaN sein könnte und ich versuchte tatsächlich, jede Änderung in diesen Vektoren zu verfolgen. Ich werde es mir jetzt nochmal ansehen. – Maineri

+0

Ich habe den Fehler gefunden. Du hattest Recht. Der Vektor 2 war NaN. Ich hatte versehentlich diesen Vektor2 vom Vertex-Shader als vec4 ausgegeben und ihn als vec3 im Fragment-Shader eingegeben. Vielen Dank! – Maineri