Asmodeus
2006-12-07, 19:19:49
Ich habe leider noch eine weitere Merkwürdigkeit beim Testen meiner 8800GTX festgestellt. Ich übergebe an einen GLSL Vertex Shader mittels uniform einen einzelnen float Wert. Dieser float Wert beträgt immer 1.0f. Innerhalb des Vertex Shaders wird dieser Wert einfach an eine varying float Variable übergeben, um darauf im Fragment Shader zugreifen zu können. Die varyings werden dann ja interpoliert. Meinem Veständnis nach (und bei einer 7900GTX ist es z.b. auch so) ergibt jegliche Interpolation zwischen 1.0f und 1.0f immer auch wieder genau 1.0f. Um das zu überprüfen färbe ich im Fragment Shader alle Fragmente rot, wo der Wert der varying float Variablen == 1.0 ist. Für Werte != 1.0 wird das Fragment grün eingefärbt. Auf einer 7900GTX kommt dabei dann folgendes Ergebnis heraus:
http://www.inf.uni-konstanz.de/~colditz/Interpol01.jpg
Das entspricht auch meiner Erwartung. Der selbe unveränderte Shader Code führt nun aber auf einer 8800GTX zu folgendem Ergebnis:
http://www.inf.uni-konstanz.de/~colditz/Interpol02.jpg
Und das ist zumindest meiner Meinung nach falsch, denn zwischen 1.0 und 1.0 zu interpolieren liefert trotzdem immer wieder genau 1.0. Oder übersehe ich bei der Sache etwas?
EDIT: Ja, ich weiß, dass man Fließkommazahlen nie auf Gleichheit testen sollte. Die ganze Sache ist ja auch nur ein vereinfachtes Testszenario, um so einige Dinge herauszufinden. ;)
Gruss, Carsten.
http://www.inf.uni-konstanz.de/~colditz/Interpol01.jpg
Das entspricht auch meiner Erwartung. Der selbe unveränderte Shader Code führt nun aber auf einer 8800GTX zu folgendem Ergebnis:
http://www.inf.uni-konstanz.de/~colditz/Interpol02.jpg
Und das ist zumindest meiner Meinung nach falsch, denn zwischen 1.0 und 1.0 zu interpolieren liefert trotzdem immer wieder genau 1.0. Oder übersehe ich bei der Sache etwas?
EDIT: Ja, ich weiß, dass man Fließkommazahlen nie auf Gleichheit testen sollte. Die ganze Sache ist ja auch nur ein vereinfachtes Testszenario, um so einige Dinge herauszufinden. ;)
Gruss, Carsten.