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

Aktuelle Zeit: Fr Jul 18, 2025 23:00

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



Ein neues Thema erstellen Auf das Thema antworten  [ 7 Beiträge ] 
Autor Nachricht
 Betreff des Beitrags: Textur-Manipulation
BeitragVerfasst: Mi Mär 21, 2007 21:55 
Offline
DGL Member

Registriert: Di Mär 13, 2007 02:40
Beiträge: 17
Hi

Ich suche nach einer Möglichkeit, billig eine Textur zu manipulieren.

Genauer gesagt will ich Dinge wie eine Minimap oder ein Radar möglichst effizient darstellen. Ich danke mal, da gibt es in OpenGL Standard-Wege, das zu tun.

Danke schonmal im Voraus.

Marvin


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Do Mär 22, 2007 09:43 
Offline
DGL Member

Registriert: Mo Dez 20, 2004 08:58
Beiträge: 442
Wohnort: Mittweida (Sachsen)
Schau Dir mal die Tuts an. Da gibt es eines, das das Rendern in eine Textur behandelt. Diese kannst Du dann auf ein Quad ziehen. Du braucghst also einen zweiten Renderpass, der die Szene in die Textur rendert (also z.B.: fürs Radar rote und grüne Punkte).
In Deinem Fall kannst Du einfach eine orthogonale Perspektive in 'Kartengröße' nehmen, dann sollten die OpenGL-Koordinaten mit den Kartenkoordinaten übereinstimmen. Jetzt zeichnest Du Deine Map oder Radar und schwupps hast Du eine Textur mit der aktuellen Karte.
Das geht übrigens genauso für Rückspiegel, Fernseher, Displays uvm. wobei man hier dann perspektivisch zeichnet und auf den geänderten Blickwinkel achten muss.

_________________
Manchmal sehen Dinge, die wie Dinge aussehen wollen, mehr wie Dinge aus, als Dinge.
<Esmerelda Wetterwax>
Es kann vorkommen, dass die Nachkommen trotz Abkommen mit ihrem Einkommen nicht auskommen und umkommen.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Do Mär 22, 2007 10:27 
Offline
DGL Member
Benutzeravatar

Registriert: Do Dez 05, 2002 10:35
Beiträge: 4234
Wohnort: Dortmund
Also ich würde nicht behaupten, dass es einen Standard weg gibt. Ich denke die Programmierung der Minimap orientiert sich sehr stark an dem wie du sie designen möchtest und was sie alles können soll. Ich gehe mal davon aus, dass du eine "klassische" Minimap meinst wie sie in Strategiespielen üblich ist. Also eine kleine Karte mit dem Nebel des Krieges (Fog of War) und Einheiten als Punkte dargestellt. Folgendermaßen würde ich das tun.

Ich würde eine Textur generieren die die Landschaft wiederspiegelt. Diese könnte man entweder in der Karte (durch einen externen Editor) speichern oder beim Laden daraus generieren. Von diese Textur würde ich immer ein Original behalten!

Je nachdem wie der Nebel des Krieges im Spiel implementiert ist würde ich dann die Bilddaten in ein neues Bild kopieren und dabei nur die Teile der originalen Karte berücksichtigen die durch den Nebel nicht verdeckt sind. Der Rest wird schwarz. Anschließend würde ich alle Relevanten Einheiten in die Textur einzeichnen. Und auch da berücksichtigen welche Sichtbar sind und welche nicht.

Diese finale Texturdaten würde ich dann mittels glTexSubImage an eine bereits erstellte Textur übergeben. Das ist so ziemlich die schnellste Möglichkeit eine Textur zu aktualisieren. Wenn die Minimap nicht allzugroß ist und nur dann neu erstellt wird wenn sich auch tatsächlich relevante Sachen verändert haben dann sollte sich das kaum bemerkbar machen. Sofern du deine Textur sinnvoll erstellt bzw darauf achtest, dass es nicht zu langsam wird. Dort soltest du aber direkt in den Speicher eines Bildes schreiben. Also falls du ein TBitmap benutzt dann solltest du auf keinen Fall canvas.pixels benutzen. Falls da auch Bedarf besteht kann ich dir wohl auch ein wenig helfen. Werde das aber nicht für dich implementieren nur um dem gleich mal vorzubeugen. ;)

Wie du eine Textur erstellen kannst kannst du in unserem Texturen Tutorial nachlesen.

PS: Je nach Design gäbe es auch noch die Möglichkeit, dass du deine Einheiten mittels kleiner texturierter Quads in die Karte einzeichnest. Wenn es nicht zu viele sind geht das auch noch schneller als da dann jedes mal eine Textur dafür zu erstellen. Den Nebel würde ich aber trotzdem in die Textur mit einbauen.

[edit] Mein Gott schreibe ich heute wieder langsam. ;)
Sidorin: Also für eine Minimap einen zusätzlichen Renderpass zu benutzen finde ich ein bisschen unnötig kompliziert und nur bedingt einsetzbar. Rückspiegel etc keine Frage aber bei einer Map geht das da ja doch schon ein Stück weiter weg. So sehe ich das zu mindest.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Do Mär 22, 2007 11:16 
Offline
DGL Member

Registriert: Mo Dez 20, 2004 08:58
Beiträge: 442
Wohnort: Mittweida (Sachsen)
Das ist eine Prima Idee. Könnte man auch anstelle der Kopie den Alphawert der Bitmap verändern (geht aber halt nur, wenn keine Einheiten usw. draufgezeichnet werden sollen)? Dann könnte man nämlich graduell die Map verblassen lassen, sprich wenn das Feld sichtbar ist (im aktuellen Frame) dann wird der Alphawert auf 1 gesetzt, wenn nicht um einen konstanten Wert verringert. Ich denke am Alphawert rumfummeln ist weniger zeitaufwändig, als jedesmal ne kopie zu ziehen.

_________________
Manchmal sehen Dinge, die wie Dinge aussehen wollen, mehr wie Dinge aus, als Dinge.
<Esmerelda Wetterwax>
Es kann vorkommen, dass die Nachkommen trotz Abkommen mit ihrem Einkommen nicht auskommen und umkommen.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Do Mär 22, 2007 19:57 
Offline
DGL Member

Registriert: Di Mär 13, 2007 02:40
Beiträge: 17
Vielen Dank für die wertvollen Tips. Ich werde damit mal rumspielen.

Und keine Angst, Lossy. Du wirdst nichts für mich implementieren müssen. Ich arbeite sowieso mit Java. :)

Marvin


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Fr Mär 23, 2007 17:03 
Offline
Guitar Hero
Benutzeravatar

Registriert: Do Sep 25, 2003 15:56
Beiträge: 7810
Wohnort: Sachsen - ERZ / C
Programmiersprache: Java (, Pascal)
Auch noch nett ist glRotate auf texturen anzuwenden. So kannst du deine Textur auf dem Minimap-Quad drehen, ohne das Quad selbst zu drehen.

Dazu musst du nur die Texturmatrix anstatt der Modelview matrix setzen.

_________________
Blog: kevin-fleischer.de und fbaingermany.com


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: So Mär 25, 2007 22:33 
Offline
DGL Member

Registriert: Di Jun 06, 2006 09:59
Beiträge: 474
Den Fog of war erzeuge ich bei meiner Minimap dadurch, dass ich die infos per scanline in ein Alpha-Only-Bitmap schreibe und das dann per GetTexture auf die Graka lade und rendere. Die Einheiten einfach über glBegin(GL_POINTS)


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.017s | 16 Queries | GZIP : On ]