Files |  Tutorials |  Articles |  Links |  Home |  Team |  Forum |  Wiki |  Impressum

Aktuelle Zeit: Do Mär 28, 2024 15:14

Foren-Übersicht » Programmierung » Shader
Unbeantwortete Themen | Aktive Themen



Ein neues Thema erstellen Auf das Thema antworten  [ 9 Beiträge ] 
Autor Nachricht
 Betreff des Beitrags: gl_Position 4. Wert
BeitragVerfasst: Mi Jan 08, 2014 16:27 
Offline
DGL Member
Benutzeravatar

Registriert: Fr Mai 31, 2002 19:41
Beiträge: 1276
Wohnort: Bäretswil (Schweiz)
Programmiersprache: Pascal
gl_Position ist ein Vektor mit 4 Werten, was macht OpenGL mit dem 4. Wert, dem 1.0 zugeordnet wrid ?
Code:
  1. void main(void){
  2.   gl_Position = vec4(inPos, 1.0);
  3.   Color = inColor;}

_________________
OpenGL


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: gl_Position 4. Wert
BeitragVerfasst: Mi Jan 08, 2014 16:35 
Offline
DGL Member

Registriert: Do Dez 29, 2011 19:40
Beiträge: 421
Wohnort: Deutschland, Bayern
Programmiersprache: C++, C, D, C# VB.Net
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.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: gl_Position 4. Wert
BeitragVerfasst: Do Jan 09, 2014 17:32 
Offline
DGL Member
Benutzeravatar

Registriert: Fr Mai 31, 2002 19:41
Beiträge: 1276
Wohnort: Bäretswil (Schweiz)
Programmiersprache: Pascal
Gegenwärtig kann ich also den Wert ignorieren bzw auf 1.0 setzen ?

_________________
OpenGL


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: gl_Position 4. Wert
BeitragVerfasst: Do Jan 09, 2014 17:39 
Offline
DGL Member

Registriert: Do Dez 29, 2011 19:40
Beiträge: 421
Wohnort: Deutschland, Bayern
Programmiersprache: C++, C, D, C# VB.Net
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)


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: gl_Position 4. Wert
BeitragVerfasst: Do Jan 09, 2014 17:56 
Offline
DGL Member
Benutzeravatar

Registriert: Fr Mai 31, 2002 19:41
Beiträge: 1276
Wohnort: Bäretswil (Schweiz)
Programmiersprache: Pascal
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.

_________________
OpenGL


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: gl_Position 4. Wert
BeitragVerfasst: Do Jan 09, 2014 18:08 
Offline
DGL Member

Registriert: Do Dez 29, 2011 19:40
Beiträge: 421
Wohnort: Deutschland, Bayern
Programmiersprache: C++, C, D, C# VB.Net
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...)


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: gl_Position 4. Wert
BeitragVerfasst: Do Jan 09, 2014 18:29 
Offline
DGL Member
Benutzeravatar

Registriert: Fr Mai 31, 2002 19:41
Beiträge: 1276
Wohnort: Bäretswil (Schweiz)
Programmiersprache: Pascal
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.

_________________
OpenGL


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: gl_Position 4. Wert
BeitragVerfasst: Do Jan 09, 2014 18:38 
Offline
DGL Member

Registriert: Do Dez 29, 2011 19:40
Beiträge: 421
Wohnort: Deutschland, Bayern
Programmiersprache: C++, C, D, C# VB.Net
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.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: gl_Position 4. Wert
BeitragVerfasst: Do Jan 09, 2014 18:42 
Offline
DGL Member
Benutzeravatar

Registriert: Do Sep 02, 2004 19:42
Beiträge: 4158
Programmiersprache: FreePascal, C++
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

_________________
If you find any deadlinks, please send me a notification – Wenn du tote Links findest, sende mir eine Benachrichtigung.
current projects: ManiacLab; aioxmpp
zombofant networkmy photostream
„Writing code is like writing poetry“ - source unknown


„Give a man a fish, and you feed him for a day. Teach a man to fish and you feed him for a lifetime. “ ~ A Chinese Proverb


Nach oben
 Profil  
Mit Zitat antworten  
Beiträge der letzten Zeit anzeigen:  Sortiere nach  
Ein neues Thema erstellen Auf das Thema antworten  [ 9 Beiträge ] 
Foren-Übersicht » Programmierung » Shader


Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 6 Gäste


Du darfst keine neuen Themen in diesem Forum erstellen.
Du darfst keine Antworten zu Themen in diesem Forum erstellen.
Du darfst deine Beiträge in diesem Forum nicht ändern.
Du darfst deine Beiträge in diesem Forum nicht löschen.
Du darfst keine Dateianhänge in diesem Forum erstellen.

Suche nach:
Gehe zu:  
cron
  Powered by phpBB® Forum Software © phpBB Group
Deutsche Übersetzung durch phpBB.de
[ Time : 0.056s | 19 Queries | GZIP : On ]