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

Aktuelle Zeit: Fr Jul 18, 2025 08:05

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



Ein neues Thema erstellen Auf das Thema antworten  [ 7 Beiträge ] 
Autor Nachricht
 Betreff des Beitrags: Zitternde Objekte. Float vs. double
BeitragVerfasst: Fr Jan 16, 2009 17:03 
Offline
DGL Member

Registriert: Mo Okt 15, 2007 18:30
Beiträge: 74
Wohnort: Berlin
Hallo,

ich habe folgendes Problem: Ich möchte ein maßstabsgetreues Planetensystem erzeugen (die inneren drei Planeten bis zur Erde mit Mond). Ich habe ein mathematisches Modell, welches die Positionen auf ca. 1 km genau berechnet. Wenn ich nun meine 'Kamera' relativ zu einem Planeten positioniere und ihn mir anschaue, dann sehe ich dass der Planet vibriert. Unser Mond wackelt schätzugsweise ca. 30-50 km hin und her. Der Abstand Erde-Sonne beträgt ca. 1.5e8 km. Laut Delphi-Dokumentation liegt die Anzahl signifikanter Stellen bei 7-8 bei single und 15-16 bei double-Werten. Die Verwacklungen deuten für mich auf die geringere Genauigkeit von single Datentypen hin. Obwohl ich in meinem Programm durchgehend double variablen erzeuge und auch alle Vektor- und Matrizenoperationen in OpenGL in der 'double'-Version ausführe, vermute ich jetzt dass OpenGL oder was danach kommt intern nur mit float rechnet. Kann jemand meine Vermutung bestätigen? Rechnet OpenGL nur mit glFloat, auch wenn ich glDouble übergebe? Oder ist das durch die GraKa festgelegt?

Marcel

_________________
Just do it!


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Fr Jan 16, 2009 18:24 
Offline
DGL Member
Benutzeravatar

Registriert: Do Sep 02, 2004 19:42
Beiträge: 4158
Programmiersprache: FreePascal, C++
Könnte an der Grafikkarte liegen, ja. Die rechnet soweit ich weiss intern mit Float.

Aber ich frage mich, wie renderst du deine Planeten mit diesen Abständen, ohne Grafikfehler zu bekommen, was den Tiefenpuffer betrifft? Oder sortierst du deine Objekte selber?

Gruß Lord Horazont

_________________
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  
 Betreff des Beitrags:
BeitragVerfasst: Fr Jan 16, 2009 19:33 
Offline
DGL Member
Benutzeravatar

Registriert: Mo Sep 23, 2002 19:27
Beiträge: 5812
Programmiersprache: C++
Alle Consumerkarten rechnen intern nur mit einfacher Präzsion. Es gibt nur einige wenige professionelle (und damit sehr teure) Karten die intern auch mit doppelter Genauigkeit rechnen können.

_________________
www.SaschaWillems.de | GitHub | Twitter | GPU Datenbanken (Vulkan, GL, GLES)


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Sa Jan 17, 2009 00:16 
Offline
DGL Member
Benutzeravatar

Registriert: Di Mai 18, 2004 16:45
Beiträge: 2623
Wohnort: Berlin
Programmiersprache: Go, C/C++
Double wird bei weitem langsamer als Float gerechnet gibt es aber.
Das bringt dich aber kein Stück weiter, da bei Universum mal Double lächerlich ist.
Was du brauchst ist ein relatives System, welches alle Werte relativ zu deiner Position im Raum ausrechnet und somit unendlich(theoretisch) große Gebiete umsetzen.
Darstellen kannst du dann alles, was in der Reichweite von Float ist.
Da Sterne aber mal ausserhalb von Float liegen, kannst du durch interpolation und einer Skybox/Skysphere diese alle Paar Frames drauf zeichnen.
Also alles zwischen maximale Sichtweite bis irgendein weit weit weg entfernter Punkt wird jedes Objekt auf die Maximale Float Sichtweite runter skaliert(damit wird das Objekt auch kleiner) und dann in die Renderpipeline gebracht(auf die Textur gezeichnet aber halt im Bereich des Floatbereiches). Das wird ein Ziemlich aufwändiger Schritt, da man natürlich sehr viele Objekte hat und deswegen wird das so selten wie möglich aktualisiert.
Nebel und so weiter, die ein ganzes stück weiter weg sind, kann man einmal als Textur beilegen und dauerhaft verwenden.
Das ganze sind dann halt mehrere Layer, 1 nahe Objekte, innerhalb der Sichtreichweite(echte OGL Meshes), 2 weiter entfernte Objekte(projeziert auf eine SkySphere/SkyBox) und 3 für alles weiter weg(konstant und wird in einem Preprozess erstellt, z.B. mit Gimp, Blender oder so).

_________________
"Wer die Freiheit aufgibt um Sicherheit zu gewinnen, der wird am Ende beides verlieren"
Benjamin Franklin

Projekte: https://github.com/tak2004


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: So Jan 18, 2009 12:35 
Offline
DGL Member

Registriert: Mo Okt 15, 2007 18:30
Beiträge: 74
Wohnort: Berlin
Hmm, ja die Sterne werden von mir schon als skysphere gezeichnet. Das funktioniert auch tatellos. Der Punkt ist nur, wenn ich zum Beispiel die Abstände der Planeten zur Sonne um den Faktor 100 verkleinere, die Planeten selbst aber in der Größe unverändert bleiben, dann habe ich ein sehr schönes Bild der Planeten. Die Ungenauigkeiten sind dann wohl verhältnismäßig gesehen im Meter-Bereich, und das fällt nicht auf. Das Problem ist nur, wenn ich eine Raumsonde oder einen Kometen sehr nah and dem Planeten vorbei fliegen lassen möchte, dann schneidet das Objekt sozusagen den Planeten. Darum versuch ich halt einen 1:1 Maßstab einzuhalten. Ob ich jetzt die Entfernung Erde-Sonne in 1.5e8 km oder in 1AU angebe ist da egal. Vermutlich reicht einfach die Float-Genauigkeit nicht aus.

_________________
Just do it!


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: So Jan 18, 2009 12:51 
Offline
DGL Member
Benutzeravatar

Registriert: Do Sep 02, 2004 19:42
Beiträge: 4158
Programmiersprache: FreePascal, C++
Nur ist die Sache, dass man eine Sonde im Vergleich zum Planeten nicht erkennen können wird...

Gruß Lord Horazont

_________________
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  
 Betreff des Beitrags:
BeitragVerfasst: So Jan 18, 2009 14:45 
Offline
DGL Member

Registriert: Mo Okt 15, 2007 18:30
Beiträge: 74
Wohnort: Berlin
Nun ja, ich könnte ja meine Kamera relativ zur Sonde positionieren und hinter hier her fliegen. Dann Fliege ich mitten durch den Planeten. Die Schwierigkeiten ergeben sich halt erst, wenn man ein bestimmtes Ereignis wie den Vorbeiflug aus der Nähe betrachten will. In der 'Totalen', wo das halbe Sonnensystem zu sehen ist, würde man diese Kollision nicht feststellen können.

_________________
Just do it!


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


Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 2 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:  
  Powered by phpBB® Forum Software © phpBB Group
Deutsche Übersetzung durch phpBB.de
[ Time : 0.008s | 16 Queries | GZIP : On ]