AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Multimedia Große Koordinaten (OpenGL)
Thema durchsuchen
Ansicht
Themen-Optionen

Große Koordinaten (OpenGL)

Ein Thema von user0 · begonnen am 9. Mär 2007 · letzter Beitrag vom 9. Mär 2007
Antwort Antwort
Benutzerbild von dizzy
dizzy

Registriert seit: 26. Nov 2003
Ort: Lünen
1.932 Beiträge
 
Delphi 7 Enterprise
 
#1

Re: Große Koordinaten (OpenGL)

  Alt 9. Mär 2007, 17:58
Das Problem ist das übliche, wenn man mit Gleitpunktwerten rechnet. Bei Werten die stark von 0 verschieden sind, sind einfach nicht mehr genug Werte zwischen 2 anderen überhaupt abbildbar um ein "Scheinkontinuum" zu sein. Am genausten sind Floats (egal wie viele Bits nun) wenn sie möglichst nah an 0 liegen. Wie weit man davon weg kann, hängt dann davon ab was man machen möchte, und wie genau der Datentyp nun ist. Da gibt es kein Patentrezept.
Allerdings ist man bei OpenGL, selbst wenn man Double-Werte übergibt, immer im Beriech von Single! Dass heisst, dass du bei 10mio schon ganz schön arg über der Genauigkeit bist. Skalieren hilft, aber nicht wenn du Details drin hast, die in ihrer Ausdehnung schon weit im Nachkommabereich liegen (das wäre aber eine wahnsinnig rieeeesige Szene mit unglaublichem Detailreichtum. Sowas ist mir zumindest noch nicht begegnet ).

Eine Mögliche Variante das ohne Skalierungen zu erledigen wäre es, den Raum in Octrees zu unterteilen, und mit einer Sichtbarkeitsprüfung nachher die Würfel zu identifizieren, die überhaupt nur dargestellt werden müssen (sollte man bei so großen Szenen ohnehin in Betracht ziehen). Noch netter wirds, wenn du die Geometrie in die Prüfung mit einbeziehst, so dass von Wänden verdeckte Raumwürfel, die zwar im Sichtfeld lägen, trotzdem ausgelassen werden.
Das was du dann noch an Raumteilen über hast, kannst du dann um den Weltmittelpunkt von OpenGL zentrieren, und die Kamera entsprechend anpassen.

Das ganze ist allerdings keine Kleinigkeit, sondern schon eher ein ziemlicher Hammer. Ich weiss ja nicht, wofür du das brauchst, jedoch weiss ich von einigen Spielen, dass sie ähnlich vorgehen (da meist aber mit Unterteilung in Zones von Hand bei Erstellung der Level, und evtl. danach Octrees).
Wenn du zudem in Echtzeit durch die Szene laufen möchtest, dann ist das ganze Prozedere was die Darstellung angeht ein immenser Zetisparer, aber auch nur, wenn man es intelligent und gut implementiert.


Wenn deine Szene also keine winzigen Details enthält, skalier besser einfach. Und wenn du nicht nah genug ran kommst, dann setz die Near-Clipping-Plane näher
Fabian K.
INSERT INTO HandVonFreundin SELECT * FROM Himmel
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 01:17 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz