Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

Black-Panther

Alter Hase

  • »Black-Panther« ist der Autor dieses Themas

Beiträge: 1 443

Wohnort: Innsbruck

  • Private Nachricht senden

1

25.01.2007, 12:41

Texturen aus Texturen

Hi!

Folgendes: Ich habe eine hochauflösende Texture (ca 20.000x10.000), nun kann ich diese natürlich nicht laden. Also hab ich mich entschlossen, dynamisch nur jenen Teil in eine 2048x2048 Texture zu laden, den ich auch brauche. D.h. wenn ich die gesamte Texture sehe, soll die 20.000x10.000 auf 2048x1024 "gequetscht" werden. Wenn ich dagegen nur den Ausschnitt 10/20 bis 4302/3200 sehe, dann soll jener auf die 2048x2048 Texture geladen werden. Dass ich da jedes mal einen Texture-Lock habe, ist klar. Nun meine Frage: Wie löse ich dieses Problem am performantesten?

Danke schonmal!

PS: Mein Ansatz ist sehr banal und unperformant, deswegen die Frage!
stillalive studios
Drone Swarm (32.000 Dronen gleichzeitig steuern!)
facebook, twitter

Nox

Supermoderator

Beiträge: 5 272

Beruf: Student

  • Private Nachricht senden

2

25.01.2007, 14:00

Wie machst du es denn bis jetzt und was stört dich an dem Ansatz?
PRO Lernkurs "Wie benutze ich eine Doku richtig"!
CONTRA lasst mal die anderen machen!
networklibbenc - Netzwerklibs im Vergleich | syncsys - Netzwerk lib (MMO-ready) | Schleichfahrt Remake | Firegalaxy | Sammelsurium rund um FPGA&Co.

3

25.01.2007, 21:29

Ich würde beim Laden einfach MIP Maps berechnen. Könnte bei der Größe jedoch dauern. Wie bekommst du so große Dateien in den Grafikspeicher?

Nox

Supermoderator

Beiträge: 5 272

Beruf: Student

  • Private Nachricht senden

4

25.01.2007, 21:57

Ich nehme mal an garnicht. Laden kann man so eine Textur aber z.B. manuell. Das stauchen und splitten ist im Prinzip auch realtiv einfach, solang man nicht auf schönes Interpolieren wert legt.
PRO Lernkurs "Wie benutze ich eine Doku richtig"!
CONTRA lasst mal die anderen machen!
networklibbenc - Netzwerklibs im Vergleich | syncsys - Netzwerk lib (MMO-ready) | Schleichfahrt Remake | Firegalaxy | Sammelsurium rund um FPGA&Co.

Das Gurke

Community-Fossil

Beiträge: 1 996

Wohnort: Pinneberg

Beruf: Schüler

  • Private Nachricht senden

5

25.01.2007, 22:03

Auch wenns ein bisschen am Thema entlang ist: Du solltest dich fragen ob du eine solch massige Textur WIRKLICH brauchst. Man kann auch viel mit gekachelten Texturen und darauf geblitteten Feinheiten erreichen. Gerade im 2D Bereich tendieren Leute dazu ihre ganze "Map" als einzelne Textur haben zu wollen, very ungut ^^

Edit:
Irgendwie hab ich angenommen das es um was zweidimensionales ging xD Antwort passt also eher darauf, gilt aber selbstverständlich auch im 3D Bereich. Bei allen solchen "aussergewöhnlichen" Bedürfnissen sollte man sich zumindest sehr gründlich überlegen obs nicht auch irgendwie anders geht ;)

Black-Panther

Alter Hase

  • »Black-Panther« ist der Autor dieses Themas

Beiträge: 1 443

Wohnort: Innsbruck

  • Private Nachricht senden

6

25.01.2007, 22:22

Hmmm... ich weiß leider sonst keine Lösung... Es geht im Prinzip um die Welt! XD
Also den Globus als ganzen. Nur kann man in meinem Fall auf ca 2-3 km Entfernung zur Erdoberfläche zoomen... und dementsprechend, sollte dort nicht alles so extrem verschwommen und texelig sein...
Was gäbe es da für alternativen? Für jede brauchbare Idee bin ich sehr dankbar!
stillalive studios
Drone Swarm (32.000 Dronen gleichzeitig steuern!)
facebook, twitter

Das Gurke

Community-Fossil

Beiträge: 1 996

Wohnort: Pinneberg

Beruf: Schüler

  • Private Nachricht senden

7

25.01.2007, 22:27

Ui, da fällt mir so einiges ein =) Aber ich geb dir mal zwei grundlegende Anschubser:

1) Die Welt besteht zu einem verdammt großen Teil aus Wasser. Wenn du nicht gerade ein Erdkundetaugliches Modell mit exalten Wellenbewegungen und Untiefen erstellen willst sollte da doch was gekacheltes reichen?

2) Es gibt dann noch so Landmassen die über das Wasser hinausragen. Die könnte man doch super als jeweils eigene Textur (mit Mipmaps) auf das tolle Wasser blitten.

Du könntest / wirst bei der Kugelform zugegebenermaßen Probleme mit der genauen Platzierung haben (zumindest ginge das wohl mir so). Aber ich würd diese Lösung trotzdem vorziehen ;)

Im Prinzip bist du auf das übliche "Level muss sehr groß werden" Problem gestoßen ^^

Black-Panther

Alter Hase

  • »Black-Panther« ist der Autor dieses Themas

Beiträge: 1 443

Wohnort: Innsbruck

  • Private Nachricht senden

8

25.01.2007, 22:31

Also.. zu 1. es handelt sich nicht um die Erde... also um einen Erde-Ähnlichen Planeten, aber eben anders.
Zu 2: Das mit dem Kacheln hab ich mir schon vor einiger Zeit überlegt... Aber damit ich bei einem Umfang von 40000km pro Texel einen km habe, brauche ich 20 * 10 (2048 * 2048) Texturen, was dann 838860800 Texel zu je 4 Byte sind --> ergo einen Speicherbedarf von: 3355443200 Byte == 3,355 GB benötigen! Also so nicht lösbar!
stillalive studios
Drone Swarm (32.000 Dronen gleichzeitig steuern!)
facebook, twitter

Das Gurke

Community-Fossil

Beiträge: 1 996

Wohnort: Pinneberg

Beruf: Schüler

  • Private Nachricht senden

9

25.01.2007, 22:46

Öhm, oke ... Ich klinke mich hier mal lieber aus anstelle was völlig falsches zu sagen, ich hab zu wenig Ahnung ^^ Im Prinzip musst du ja "nur" das Viewfrustum der Kamera herausbekommen und den Abstand zur Welt. Das wird dann umgerechnet auf die 2D Position der Textur und eben angezeigt. Wie das in Code genau geht weiss ich aber auch nicht. Nur um Missverständnissen vorzubeugen: Du stellst dir den Mechanismus ein wenig wie bei Google Earth vor?

Um Mipmaps wirst du aber auf keinen Fall herumkommen, auch nicht mit dieser Methode! Stell dir vor der User zoomt so weit heraus, dass er die ganze Welt sehen kann (wie auch immer das genau geht, aber die Hälfte wird er schon schaffen ^^), die musst du dann ja auch irgendwie anzeigen.

Guck dir eventuell mal den Paging Landscape Scene Manager von Ogre an, der könnte dir bei diesem Problem ne menge Kopfschmerzen ersparen ;)

Nox

Supermoderator

Beiträge: 5 272

Beruf: Student

  • Private Nachricht senden

10

25.01.2007, 23:26

Ein Ansatz:

Zerleg die Textur des Planeten gleich in mehrere Kacheln. Speicher von jeder Kachel n-Detailstufen. Dann prüfst du bei jedem Renderschritt, wie weit du von der Planetenoberfläche entfernt bist und setzt die entsprechende Stufe ein. Frisst zwar etwas Festplattenspeicher und du solltest nicht immer alle Texturen im Speicher geladen haben sondern immer nur die benötigten Kacheln in der entsprechenden Stufe und viell. von allen anderen Kacheln immer nur die Minimalfassung. Oder du lässt immer nur die benachbarten Kacheln zusätzlich im Speicher(also nicht alle).

Willst du ein Googleearth nachbauen?^^
PRO Lernkurs "Wie benutze ich eine Doku richtig"!
CONTRA lasst mal die anderen machen!
networklibbenc - Netzwerklibs im Vergleich | syncsys - Netzwerk lib (MMO-ready) | Schleichfahrt Remake | Firegalaxy | Sammelsurium rund um FPGA&Co.

Werbeanzeige