Scrollender Hintergrund

Programmiersprachen, APIs, Bibliotheken, Open Source Engines, Debugging, Quellcode Fehler und alles was mit praktischer Programmierung zu tun hat.
Antworten
Psycho
Establishment
Beiträge: 156
Registriert: 16.09.2002, 14:23

Scrollender Hintergrund

Beitrag von Psycho »

Hallo,

wie ihr vielleicht mitbekommen habt, arbeite ich zur Zeit an Serious Raptor.
Nun würde ich für jedes Level gerne ein Hintergrundbild verwenden, welches die Landschaft darstellt.
Es wird nur in vertikaler Richtung gescrollt, das Bild hätte also Maße von zB 800x10000 Pixel.

Wie render ich diesen Hintergrund nun am besten mit OpenGL?
Eine einzelne Textur fällt als Möglichkeit glaub ich raus, da nicht jede Grafikkarte mit so großen Texturen umgehen kann.
Mein bisheriger Ansatz ist, das Bild in zB 256x256 große Blöcke aufzuteilen und einzeln zu rendern. Klappt immerhin.

Ist es überhaupt sinnvoll, eine große Datei als Hintergrund zu verwenden? Braucht im Vergleich zum Rest des Spiels immerhin ganz schön viel Speicher.
Wäre Streaming sinnvoll? Wie würde ich das am besten umsetzen, so dass es keine Verzögerungen während des Spielens gibt?
Benutzeravatar
Schrompf
Moderator
Beiträge: 4859
Registriert: 25.02.2009, 23:44
Benutzertext: Lernt nur selten dazu
Echter Name: Thomas Ziegenhagen
Wohnort: Dresden
Kontaktdaten:

Re: Scrollender Hintergrund

Beitrag von Schrompf »

Technisch knifflig, aber nicht unlösbar. also: keine, aber wirklich keine Grafikkarte, kann mehr als 8192 Pixel große Texturen darstellen. Du wirst in jedem Fall aufteilen müssen. 256^2 wär allerdings eine alberne Wahl, wenn Dein Hintergrund feste 800 Pixel breit ist. Teile den Hintergrund z.b. in 800x512-Segmente auf, wovon Du dann maximal drei brauchst. Immer maximale zwei sind gleichzeitig sichtbar, die dritte kannst Du derweils mit neuen Daten befüllen. Probiere einfach mal, ein solches Segment am Stück mit neuen Daten zu befüllen, und schau, ob Du den Ruckler im Spiel tatsächlich bemerkst. Wenn ja, kannst Du das Hochladen ja in Segmenten von z.B. 16 Pixelzeilen machen und über viele Frames verteilen. Wieviel Zeit Du dafür hast, kannst Du ja anhand der Scrollgeschwindigkeit ermitteln.

800x10000 sind übrigens nur 8MPixel, bei DXT1-Kompression also 4MB. Das halte ich für vernachlässigbar. Selbst unkomprimiert sind das gerade mal 24MB VideoRAM. Da kannst Du im einfachsten Fall auch alle 512er-Segmente vorab erstellen und hochladen und musst zur Laufzeit gar keine Rechenzeit mehr investieren.
Früher mal Dreamworlds. Früher mal Open Asset Import Library. Heutzutage nur noch so rumwursteln.
Benutzeravatar
Zudomon
Establishment
Beiträge: 2254
Registriert: 25.03.2009, 07:20
Kontaktdaten:

Re: Scrollender Hintergrund

Beitrag von Zudomon »

Wie willst du die Hintergründe erstellen? Wäre es nicht sinnvoller, das ganze aus Einzelelmenten zusammenzubasteln? Das wäre speichersparender und du bräuchtest dir keine Gedanken um Auflösungen machen. Anfangen könntest du mit einer kleinen Hintergrundtextur, die sich immer wiederholt... das ist natürlich noch sehr auffällig. Wenn du nun aber eine zweite Hintergrundtextur darüberlegst und an bestimmten stellen transparent machst, dann bekommst du schon gut Abwechslung darein. Über diesen Untergrund setzt du nun weitere Sprites, für Pflanzen, Gebäude usw.
Wenn du diese Sprites etwas schneller bewegst, wie den normalen Untergrund, dann bekommt es sogar einen Tiefeneffekt.
Benutzeravatar
TGGC
Establishment
Beiträge: 569
Registriert: 15.05.2009, 18:14
Benutzertext: Ich _bin_ es.
Alter Benutzername: TGGC
Echter Name: Ich _bin_ es.
Wohnort: Mainz
Kontaktdaten:

Re: Scrollender Hintergrund

Beitrag von TGGC »

Benutzeravatar
kimmi
Moderator
Beiträge: 1405
Registriert: 26.02.2009, 09:42
Echter Name: Kim Kulling
Wohnort: Luebeck
Kontaktdaten:

Re: Scrollender Hintergrund

Beitrag von kimmi »

Cooler Beitrag! Und da sag noch einer, mehrere Communities haben nur Nachteile *ketz* ;).

Gruß Kimmi
Benutzeravatar
Chromanoid
Moderator
Beiträge: 4260
Registriert: 16.10.2002, 19:39
Echter Name: Christian Kulenkampff
Wohnort: Lüneburg

Re: Scrollender Hintergrund

Beitrag von Chromanoid »

Wenn du TGGCs Vorschlägen folgst, schlage ich noch pro malbares Objekt einen ScrollfaktorX und ScrollfaktorY vor, die mit den Bildschirmkoordinaten multipliziert werden. So kann man dann ganz einfach Parallax-Scrolling einbauen.
Psycho
Establishment
Beiträge: 156
Registriert: 16.09.2002, 14:23

Re: Scrollender Hintergrund

Beitrag von Psycho »

Zu TGGCs Artikel:
Vielleicht habe ich mich etwas undeutlich ausgedrückt. Mein Problem ist nicht, wie ich Spielkoordinaten in Bildschirmkoordinaten umwandel. Wer Serious Raptor einmal ausprobiert hat, wird wohl bemerkt haben, dass das bereits funktioniert.
Mein Problem ist, die große Background.bmp vernünftig zu rendern. Mein Hintergrund besteht nicht aus einzelnen Tiles, sondern ist eine riesige Textur. Aber selbst das funktioniert bereits durch Blöcke mit frei definierbarer Blockgröße.
Schrompf hat mein Problem genau erkannt. Meinst Du mit hochladen, die Daten aus dem RAM zur GPU zu schicken (also das gesamte Bitmap im RAM bereit halten), oder von der Festplatte aus? Ich werd einfach mal ein wenig rumprobieren, aber es kann sich natürlich der Fall ergeben, dass andere Systeme beim Streaming ins Stocken kommen.
Stimmt schon, dass es "nur" 24 MB sind, aber ich mag es nicht, verschwenderisch mit Ressourcen zu sein, nur weil die Systeme heute alle ach so schnell sind. Wobei es in diesem Fall aber wahrscheinlich sogar der beste Kompromiss zwischen Aufwand und Nutzen ist.
also: keine, aber wirklich keine Grafikkarte, kann mehr als 8192 Pixel große Texturen darstellen.
Oha. Hat das technische Gründe? Ich mein, Grafikkarten gibt es schon soo lange und man ist immer noch nicht in der Lage, freie Größen für die Texturen zu wählen?

Zudomon: Ich habe einen Screenshot von Google Maps gemacht und der gefällt mir ganz gut. Die andere Möglichkeit, den Hintergrund selbst zu "mixen", hab ich auch überlegt. Mir würde ein BMP jetzt aber besser gefallen, eventuell implementier ich das andere zusätzlich. Parallax-Scrolling brauch ich höchstens für ein paar Wolken. Mal gucken.
Benutzeravatar
kimmi
Moderator
Beiträge: 1405
Registriert: 26.02.2009, 09:42
Echter Name: Kim Kulling
Wohnort: Luebeck
Kontaktdaten:

Re: Scrollender Hintergrund

Beitrag von kimmi »

Kannst du die eine große Bitmap nicht zerteilen und in Tiles unterteilen? In deine aktuelle View zeigst du dann die sichtbaren Tiles an.

Gruß Kimmi
Benutzeravatar
Zudomon
Establishment
Beiträge: 2254
Registriert: 25.03.2009, 07:20
Kontaktdaten:

Re: Scrollender Hintergrund

Beitrag von Zudomon »

Du könntest ja dann auch das GoogleMaps Bild in einzelteile zerlegen, so wie das ja schon für tiles gemacht hast, und denen dann eine Alphatextur spendieren. Dann könntest du mit ein wenig zufall auch endlose Texturen im selben Style generieren.

Ansonsten wäre ich vorsichtig, da du das Projekt ja auch hier veröffentlichen willst, was die GoogleMaps angeht, nicht dass du da hinterher noch eine Abmahnung für kassierst.

http://www.basicthinking.de/blog/2008/0 ... le-laufen/

Gruß
Zudo
Psycho
Establishment
Beiträge: 156
Registriert: 16.09.2002, 14:23

Re: Scrollender Hintergrund

Beitrag von Psycho »

kimmi: Ja, das geht.
Mein bisheriger Ansatz ist, das Bild in zB 256x256 große Blöcke aufzuteilen und einzeln zu rendern. Klappt immerhin.
Aber gibt es vielleicht einen besseren Ansatz?

Wegen Google: Ja hab schon gelesen, dass das mit den Rechten nicht so einfach zu sein scheint. Vielleicht knips ich selber ein paar Fotos von Sand oder so ;)
Das Problem, das ich sehe, wenn ich den Hintergrund nach einem Muster generiere: Bei meinen Künsten wird man das sofort raussehen. Aber ausprobieren werd ich es mal.
Benutzeravatar
Schrompf
Moderator
Beiträge: 4859
Registriert: 25.02.2009, 23:44
Benutzertext: Lernt nur selten dazu
Echter Name: Thomas Ziegenhagen
Wohnort: Dresden
Kontaktdaten:

Re: Scrollender Hintergrund

Beitrag von Schrompf »

Ok, ich war da nicht ganz eindeutig im Ausdruck. Mit "Hochladen" meine ich das Kopieren der Grafikdaten in den VideoRAM. Das Laden in den Hauptspeicher halte ich für kein Problem... spätestens da ist jeder Aufwand zum Speicherersparen verschwendet. Und auch beim VideoRAM empfehle ich Dir, immer zu allererst an Deiner Arbeitszeit zu sparen und keine nichtexistenten Probleme zu lösen. 24MB VideoRAM sind kein Problem für niemaden... selbst eine betagte Geforce2 hatte mehr, und inzwischen ist NVidia soviel weiter, dass es schon einen Overflow und eine zweite Zweier-Generation von Geforce-Grafikkarten gibt. Wenn's Dich stört, jag die DXT-Kompression drüber und schon sind's nur noch 4MB.
Früher mal Dreamworlds. Früher mal Open Asset Import Library. Heutzutage nur noch so rumwursteln.
Benutzeravatar
kimmi
Moderator
Beiträge: 1405
Registriert: 26.02.2009, 09:42
Echter Name: Kim Kulling
Wohnort: Luebeck
Kontaktdaten:

Re: Scrollender Hintergrund

Beitrag von kimmi »

Psycho hat geschrieben:kimmi: Ja, das geht.
Mein bisheriger Ansatz ist, das Bild in zB 256x256 große Blöcke aufzuteilen und einzeln zu rendern. Klappt immerhin.
Aber gibt es vielleicht einen besseren Ansatz?
Glatt überlesen, sorry.

Kimmi
Benutzeravatar
Chromanoid
Moderator
Beiträge: 4260
Registriert: 16.10.2002, 19:39
Echter Name: Christian Kulenkampff
Wohnort: Lüneburg

Re: Scrollender Hintergrund

Beitrag von Chromanoid »

@Psycho, bei deinem spiel ist doch die zeit wann ein bestimmter hintergrund erreicht wird ausrechenbar (oder?), von daher sollte es doch möglich sein realtiv einfach die richtigen texturen vorzuladen.

btw hast du schon das hier gesehen?
http://code.google.com/intl/de/apis/map ... taticmaps/
Psycho
Establishment
Beiträge: 156
Registriert: 16.09.2002, 14:23

Re: Scrollender Hintergrund

Beitrag von Psycho »

kimmi: Kein Problem, ich bin ja froh über Antworten.

Ich hatte in der Vergangenheit manchmal Probleme, die ich erstmal intuitiv in der erstbesten Lösung programmiert habe, die mir einfiel. Dann habe ich zwei Jahre später oder so die gleiche Problemstellung in nem Forum gesehen und geschicktere Lösungen gesehen. Dann dachte ich: Hätteste auch mal fragen können.

Deswegen habe ich den Thread hier überhaupt erstellt. Die für mich einfachste Lösung hab ich umgesetzt und sie funktioniert sogar, aber da ich wohl nicht der erste mit dem Problem bin, dachte ich, frag ich mal halt ;)

Chromanoid: Ja die Zeit ist vorhersehbar. Ich glaub ich mach mir die Mühe nun aber doch nicht, Schrompf hat mich überzeugt, dass 24MB nicht die Welt sind.
Staticmaps hab ich mir vorhin mal angesehen. Für mich sah das aber so aus, dass man zum Offline-Speichern keine Lizenz hat, dh das Spiel müsste zu Beginn eine Internetverbindung aufbauen. Das möchte ich nicht.
Benutzeravatar
Chromanoid
Moderator
Beiträge: 4260
Registriert: 16.10.2002, 19:39
Echter Name: Christian Kulenkampff
Wohnort: Lüneburg

Re: Scrollender Hintergrund

Beitrag von Chromanoid »

btw. schon mal gedacht mit irgendwas anderem den kram im hintergrund zu rendern. z.b. "einfach" einen browser einzubetten? ich könnte mir zum beispiel gut vorstellen über wikipedia seiten zu fliegen und dort böse wissensvernichter zu jagen :) wenn dir das thema nicht so lieb ist, könnte man evt. ja auch über google maps cruisen. allerdings weiß ich nicht wie leicht das zu erreichen ist.
Antworten