DGL https://delphigl.com/forum/ |
|
gl_Position 4. Wert https://delphigl.com/forum/viewtopic.php?f=20&t=11077 |
Seite 1 von 1 |
Autor: | mathias [ Mi Jan 08, 2014 16:27 ] |
Betreff des Beitrags: | gl_Position 4. Wert |
gl_Position ist ein Vektor mit 4 Werten, was macht OpenGL mit dem 4. Wert, dem 1.0 zugeordnet wrid ? Code:
|
Autor: | OpenglerF [ Mi Jan 08, 2014 16:35 ] |
Betreff des Beitrags: | Re: gl_Position 4. Wert |
Was OpenGL im Hintergrund noch macht, ist hier genau erklärt: opengl.org/wiki/Vertex Post Processing Mit der W-Koordinate wird die perspektivische Division durchgeführt. Das war früher vermutlich deutlich performanter als eine Division direkt im Shader. Man kann/konnte es direkt in Verbindung mit homogenen Matrixen nutzen, dort ist ja auch diese Rechnung notwendig. Ansonsten kann man im seltenen Fällen die Koordinate vielleicht als billige Division verwenden. Heutzutage ist der VS aber in seltensten Fällen ein Engpass. |
Autor: | mathias [ Do Jan 09, 2014 17:32 ] |
Betreff des Beitrags: | Re: gl_Position 4. Wert |
Gegenwärtig kann ich also den Wert ignorieren bzw auf 1.0 setzen ? |
Autor: | OpenglerF [ Do Jan 09, 2014 17:39 ] |
Betreff des Beitrags: | Re: gl_Position 4. Wert |
Eine Division durch 1 ändert nicht. Also ja. Ich hatte vor Kurzen mal tagelang nach einen Fehler beim Rendering gesucht, weil ich W versehentlich auf 0 gesetzt hatte. Und /0 liefert hier sehr große Zahlen. (Also nicht IEEE Konform) |
Autor: | mathias [ Do Jan 09, 2014 17:56 ] |
Betreff des Beitrags: | Re: gl_Position 4. Wert |
Zitat: Und /0 liefert hier sehr große Zahlen. Müsste da nicht diese Fehlermeldung kommen: Division by zero ? Ich habe noch nie was anderes von einem PC/Taschenrechner bekommen. |
Autor: | OpenglerF [ Do Jan 09, 2014 18:08 ] |
Betreff des Beitrags: | Re: gl_Position 4. Wert |
Nein. Beim X86/X64 gibt es bei Integerrechnung bei einer Division durch 0 eine CPU-Exception die vom Betriebssystem behandelt wird und in der Regel dein Programm mit Fehlermeldung beendet. Solch komplizierte Mechanismen gibt es jedoch nicht in OpenGL. Für Gleitkommazahlen ist ohnehin nicht üblich. Die Norm IEEE 754 (Nach der man sich heutzutage bei Gleitkommazahlen meist richtet) definiert, dass eine Division einer positiven Zahl durch 0 den Spezialwert positiv Unendlich erzeugt. Dementsprechend erzeugen negative Zahlen durch 0 negativ Unendlich. Außer bei 0/0, das erzeugt NAN (Not a number). NAN ist so zu sagen wieder eine Fehlerbenachrichtigung. Jede weitere Operation mit NAN gibt ebenfalls selbst wieder NAN zurück. Die Rechnung bei der perspetivischen W-Division erzeugt jetzt aber nicht Unendlich oder NAN sondern behandelt sie als normale wenn auch sehr kleine Zahl. (So als ob 0 gleich ~0.00000000001 wäre...) |
Autor: | mathias [ Do Jan 09, 2014 18:29 ] |
Betreff des Beitrags: | Re: gl_Position 4. Wert |
Ich habe es gefunden: Zitat: Unendlich Der Gleitkommawert „Unendlich“ repräsentiert Zahlen, deren Betrag zu groß ist, um dargestellt zu werden. Es wird zwischen +„Unendlich“ und −„Unendlich“ unterschieden. Die Berechnung von 1,0/0,0 ergibt per Definition ebenfalls +„Unendlich“. Lese ich das richtig, das die Norm 1985 verabschiedet wurde ? Dann währe die Norm schon etwas älter. |
Autor: | OpenglerF [ Do Jan 09, 2014 18:38 ] |
Betreff des Beitrags: | Re: gl_Position 4. Wert |
Ja, ist nicht so neu. Soweit ich weiß, waren die ersten Versionen des x87 Koprozessors nicht 100% kompatibel. Das ist aber lange, lange her und hat auch nichts mit Ausnahmen bei 0-Divisionen zu tun. |
Autor: | Lord Horazont [ Do Jan 09, 2014 18:42 ] |
Betreff des Beitrags: | Re: gl_Position 4. Wert |
Anmerkung: Genaugenommen kann man das einstellen, welche Operationen Fehler sein sollen, die mit einem SIGFPE (Floating Point Exception) quittiert werden. Dafür gibt es die FPU Flags, welche z.B. auch im DGL-Header gesetzt werden. grüße |
Seite 1 von 1 | Alle Zeiten sind UTC + 1 Stunde |
Powered by phpBB® Forum Software © phpBB Group https://www.phpbb.com/ |