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

Aktuelle Zeit: Fr Jul 04, 2025 17:00

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



Ein neues Thema erstellen Auf das Thema antworten  [ 11 Beiträge ] 
Autor Nachricht
BeitragVerfasst: Di Sep 25, 2007 17:37 
Offline
DGL Member

Registriert: Mi Sep 19, 2007 11:02
Beiträge: 12
Ich habe eine Landschaft, die aus Höhendaten-Bildern generiert wird. Auf der Landschaft befinden sich 2D-Objekte, wie Strasse, Flüsse usw. Diese Objekte bestehen aus Polygonen, deren Positionen durch vorgegebene (x,y)-Koordinaten definiert sind. Diese Objekte sollen aber nicht flach gezeichnet, sondern so angehoben werden, dass sie auf dem Höhenterrain liegen.

Das Problem ist nun, dass die Koordinaten dieser Objekte nicht mit dem Gitternetz des Höhenterrains übereinstimmen. Das bedeutet zum einen, dass die Höhe für jeden Vertex eines Objektes aus benachbarten Gitterpunkten interpoliert werden muss, und zum anderen, dass längere 2D-Objekte wie Strassen in kleinere Stücke aufgeteilt werden müssen um auf das Höhenterrain gelegt werden zu können.

Da das ziemlich viel Rechnerei bedeutet, hab ich mir einen anderen Ansatz überlegt: Ich rendere all die sichtbaren 2D-Objekte offscreen in eine Gesamttextur (oder ein Buffer?) und "klebe" sie anschließend auf das Höhenterrain wie eine gewöhnliche Textur. Dadurch entfallen die ganzen Berechnungen, die ich sonst machen müsste.

Was ich nun gerne wissen würde, bevor ich mit dem Programmieren anfange (und dann womöglich scheitere), ist:

- Wie macht man so ein Rendern in eine Textur/Buffer? Das müsste am Besten im gleichen Renderpfad geschehen wie das Rendern der ganzen anderen Szenerie. Gibt es spezielle Techniken/Extensions dafür? Vielleicht auch Tutorials? (meine google-Suche hat leider nichts erbracht).

- Ist dieses offscreen Rendern schnell genug? Kann man damit flüssige Darstellung (über 25fps) erreichen?

Danke im Voraus!

Mike


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mi Sep 26, 2007 08:53 
Offline
DGL Member
Benutzeravatar

Registriert: Sa Aug 18, 2007 18:47
Beiträge: 694
Wohnort: Köln
Programmiersprache: Java
Je nachdem wie groß du deine Megatexture machen willst wäre es wahrscheinlich praktisch diese zu unterteilen.
Bin auch gerade überfragt ob man überhaupt ausserhalb des Viewports zeichnen kann....

Wie auch immer...

zuerst in orthogonalen Modus wechseln und deine Texturen rendern.
Anschliessend deine Teil-Textur binden und mit glCopyTexSubImage2D darin ablegen.

wobei du das offscreen-rendern im optimalen fall ja nur einmal machst...


(meine "versuchs" landschaft rendere ich 3mal pro frame. ist noch nicht viel optimiert, läuft aber trotzdem so mit 90-120 fps ziemlich stabil (GF8600))


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mi Sep 26, 2007 09:28 
Offline
DGL Member
Benutzeravatar

Registriert: Do Dez 05, 2002 10:35
Beiträge: 4234
Wohnort: Dortmund
Wenn du diese Texturen sehr häufig ändern musst ist das klassische RenderToTexture eher nicht so prickelnd, da es nicht wirklich schnell ist. Wenn du sie nur ein einziges Mal erstellen musst dann spielt es wohl eher kaum eine Rolle. Aber bei dem klassischem RenderToTexture ist die maximal mögliche Größe der Textur von der Größe deines Renderbereiches abhängig. Also 1024x1024 sind bei Auflösungen von 1024x768 nicht möglich, da unterhalb etwas abgeschnitten wird. Als Alternative würde ich auf moderneren Grafikkarten eher Framebuffer Objects empfehlen.

Aber sonst solltest du bedenken, dass durch eine Textur durchaus Qualität verlohren gehen kann. Denn wenn du deine Objekte so in die Textur rendest haben sie eine feste Auflösung. Wenn du näher ran zoomen kannst dann wird es pixelig. Wenn du dafür aber die Tetxurgröße erhöhst benötigst du mitunter wesentlich mehr Speicher und beim wegzoomen kann es zu unschönen Effekten kommen, denn du hast keine MipMaps.

Da wir so nicht ganz abschätzen können was du eigentlich mit den Texturen vor hast musst du abwägen was du noch alles brauchen wirst. Aber ich denke der Weg über einen Offscreenbuffer ist schon mal nicht verkehrt.

In aktuelleren Spielen sieht man häufig nur diese Buffer, da das komplette Bild erst einmal in einen solchen Buffer geschrieben wird und anschließend noch solche Effekte wie Bloom, Spiegelungen im Wasser etc. darauf angewendet werden.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mi Sep 26, 2007 10:18 
Offline
DGL Member

Registriert: Mi Sep 19, 2007 11:02
Beiträge: 12
Danke für Eure Hilfe!

Ich dachte eigentlich nicht an ein Megatexture von der gesamten Landschaft. Mein Gedanke war, dass das was die Kamera grade sieht (z.b. ein Gebiet von 1x1km Größe) nicht auf den Bildschirm, sondern im Ortho-Modus auf ein Bild/Buffer gerendert wird. Anschließend wird das Bild auf die 3D-Landschaft gelegt.

Das Offscreen-Rendern würde ich dann in jedem Frame neu machen, so dass das Bild immer feiner wäre, wenn man sich näher an die Landschaft bewegt und umgekehrt immer gröber wenn man sich weiter weg entfernt. Dadurch würde ich hoffentlich auch die unschönen Pixel-Artefakte vermeiden.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mi Sep 26, 2007 10:28 
Offline
DGL Member
Benutzeravatar

Registriert: Mo Jan 31, 2005 11:02
Beiträge: 432
Wohnort: Rheinlandpfalz
Wenn du deine Objekte als Textur auf deine Heightmap blenden willst, kannst du doch diese Textur außerhalb deines Programmes erstellen, vorausgesetzt sie bleibt statisch (was bei Straßen und Flüssen aber meistens der Fall ist :wink:).
Also ich würde mir nen netten Editor schreiben, in dem du deine Straßen, Flüsse hübsch auf der Map verteilen kannst, und daraus wird dann einfach eine Textur erstellt, die du dann (evtl. gekachelt) über deine ganze Map legst.
Andernfalls kannst du auch die Textur in üblichen Bildbearbeitungsprogrammen wie Gimp zusammenbauen.

In dieser Textur kannst du dann noch, wo keine Straßen liegen, Gras, Sand oder ähnliche Oberflächen einsetzen.
Generell kann ich dir dafür dieses Tool empfehlen.
Leider kann man dort nicht die Höhen für jede Textur angeben. Falls das für dich ein Problem ist kann ich dir mal meine Version davon hochladen, die zwar keinen Schatten erstellen kann, bei der man aber die Höhen für die Texturen einstellen kann.

Also nochmal zusammengefasst:
Erst mit oben genannten Tool (oder mit meinem) eine Textur für die Heightmap erstellen.
Dann mit einem Editor deine Straßen und Flüsse in diese Textur einbauen.

Vielleicht habe ich dich auch falsch verstanden... In diesem Falle ignoriere alles :lol:

_________________
http://texelviews.delphigl.com


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mi Sep 26, 2007 10:51 
Offline
DGL Member
Benutzeravatar

Registriert: Sa Aug 18, 2007 18:47
Beiträge: 694
Wohnort: Köln
Programmiersprache: Java
Zitat:
Das Offscreen-Rendern würde ich dann in jedem Frame neu machen, so dass das Bild immer feiner wäre, wenn man sich näher an die Landschaft bewegt und umgekehrt immer gröber wenn man sich weiter weg entfernt.

Genau das ist Megatexture :) Zumindest wird es so in der idTech4 Engine (ETQW etc) verwendet. Und Meister Carmack nennt es eben Megatexture. Der Shader bekommt (ich glaube) 6 Mip-Texturen verpasst und bastelt daraus die Oberfläche zusammen. Nur der Unterschied liegt darin, dass dort der Shader die Arbeit übernimmt und die eigentlichen Daten schon fertig vorliegen und nur vom Programm zurecht gerückt werden müssen.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mi Sep 26, 2007 10:55 
Offline
DGL Member

Registriert: Mi Sep 19, 2007 11:02
Beiträge: 12
Ein Vorerstellen einer Megatexture (bzw. vieler kleinerer Texturen) kommt bei mir leider nicht in Frage, weil 1) die Objekte dynamisch verteilt werden und 2) die beim Vorerstellen benötigte Texturauflösung (ca im Dreh ganz Deutschland in 0,5m Auflösung) würde den Rahmen einer Megatexture sprengen und ich müsste dann einen Server oder ähnliches für das Verwalten der Texturen schreiben.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mi Sep 26, 2007 11:05 
Offline
DGL Member
Benutzeravatar

Registriert: Mo Jan 31, 2005 11:02
Beiträge: 432
Wohnort: Rheinlandpfalz
Ok, wusste nicht, dass da solche Ausmaßen am Werk sind :wink:
Wird das sowas wie ein Deutschland-Atlas in 3D, GooglEarth-like?

_________________
http://texelviews.delphigl.com


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mi Sep 26, 2007 11:05 
Offline
DGL Member
Benutzeravatar

Registriert: Sa Aug 18, 2007 18:47
Beiträge: 694
Wohnort: Köln
Programmiersprache: Java
hast du mal hier nachgeschaut?


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mi Sep 26, 2007 11:55 
Offline
DGL Member

Registriert: Mi Sep 19, 2007 11:02
Beiträge: 12
Ja die Seite von Virtual Terrain Project ist mir nicht unbekannt, leider finde ich da nichts spezielles zu meinem Problem :(


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mo Okt 01, 2007 17:06 
Offline
DGL Member

Registriert: Di Jun 06, 2006 09:59
Beiträge: 474
Die Vertexprojektionsberechnungen musst du doch für ein nicht animiertes objekt nur 1x machen. Da sehe ich den Vorteil vom in eine textur rendern nicht.
Falls sich die Objekte nicht überschneiden kannst du statt dessen auch einfach ein 2. set an texturkoords errechnen, und das dass mit multitexturing verwenden.

_________________
Bild


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


Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 3 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.012s | 17 Queries | GZIP : On ]