GLSL, Wie zu gewährleisten größtmögliche float-Wert, ohne überlauf
Von dem, was ich verstehe, gibt es keine FLT_MAX Typ von Konstanten in GLSL.
Gibt es eine Möglichkeit, um sicherzustellen, dass ein Schwimmer stellt den größten möglichen Wert, ohne überlauf?
EDIT:
Da er gefragt wurde, was ich mit diesem für:
Ich bin im Grunde Skalierung von einem Punkt aus in die "Unendlichkeit". Seine für die 2D-Schatten, wo ich komplett umzugestalten das Dreieck Streifen Schatten auf der GPU. Als ich kann nur Steuern, befassen sich mit einem einzelnen Scheitelpunkt in einer Zeit, die w-Komponente speichert, ob es bleibt auf dem Rumpf oder projiziert bis unendlich.
In dem Fall, dass beide "Schatten-Grenze-Punkte' sind auf der gleichen Kante, und das Licht ist fast colinear mit, dass Kante, ich brauche, um sicherzustellen, dass das Dreieck noch den gesamten Bildschirm ausfüllt. Das ist schwer zu beschreiben.
- Wollen Sie etwas bestimmtes mit diesen Schwimmern von ungewöhnlicher Größe?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ja, nach dem GLSL-Spezifikation der Sprache in 4.1.4 sind Sie standard IEEE 754-Datentypen. Ich nehme an, das fehlen von FLT_MAX ist einfach, da es unterschiedliche Längen erhältlich: single precision (float), double precision (double) und manchmal sogar die Hälfte Präzision.
Sie können positive und negative Unendlichkeit, oder wenn Sie ein finite-max/min-Wert, der die höchsten zahlen in Gleitkomma. Das genaue Muster ist einfach, um herauszufinden, ob Sie suchen, stackoverflow.
In GLSL, IEEE 754 infinity können bequem erreicht werden, die durch Division durch null:
GLSL verwendet den IEEE-754-floating-point-definition für
float
:Den maximal Darstellbare float-Wert ist (1 − 2^-24) × 2^128
Typische maximale floating-point-Werte
Daher können Sie diese (aus Microsoft ' s schweben.h)
Genaue maximale floating-point-Wert
Ebenfalls, da die maximale floating-point-Wert ist
hier ist ein weiterer interessanter Weg, um eine genaue Maximalwert: