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

David Mehre

unregistriert

1

05.08.2009, 18:22

Landschaft: Sichtbar / Unsichtbar

Hallo,

ich versuche momentan das Grundprinzip von Strategiespielen nachzuentwickeln. Undzwar sieht man in solchen Spielen immer nur den Teil der Weltkarte, den man bereits erforscht hat. Jede Einheit besitzt einen "Sichtbarkeitsradius", mit dem man die Karte erforschen kann.
Bisher kann ich mit Hilfe des Stencil-Buffers nur die Bereiche der Karte anzeigen, welche im Sichtbarkeitsradius liegen. Das Problem besteht nun im Anzeigen der Gebiete, welche bereits erforscht sind und nicht in den Sichtbarkeitsradius einer Einheit fallen: da ich dies nicht wie bisher über den Stencil-Buffer realisieren kann, benötige ich eine andere Methode.
Mein Ansatz wäre, eine Textur mit der Breite und Länge der Karte zu erstellen, welche für jeden Punkt einen Wert (erforscht / nicht erforscht) als Pixel auf der Textur speichert - das Problem dabei besteht nur darin, diejenigen Punkte der Karte herauszufinden, welche im aktuellen Frame erforscht werden.

Kann mir hierbei jemand eine Gedankenstütze geben oder mir einen anderen Ansatz nennen?

Beste Grüße.

Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »David Mehre« (17.10.2011, 18:02)


drakon

Supermoderator

Beiträge: 6 513

Wohnort: Schweiz

Beruf: Entrepreneur

  • Private Nachricht senden

2

05.08.2009, 18:32

Ich würde da wahrscheinlich eine Art Tilemap dazu nehmen oder das sogar in der aktuellen Tilemap drin speichern. Irgendein Wert, ala "visited" und dann kannst du das Tile entweder zeichnen, oder nicht. Und ggf. noch ein wenig Schatten am Rand erzeugen, damit es ein etwas fliesenderen Übergang gibt.

the[V]oid

Alter Hase

Beiträge: 775

Wohnort: Aachen

  • Private Nachricht senden

3

05.08.2009, 18:34

Wo genau ist da das Problem? Die Punkte, die gerade erfortscht werden, sind gegeben durch den Flächeninhalt aller "Sichtbarkeitskreise" um deine Einheiten abzüglich der Punkte, die bereits in deiner Textur als erforscht markiert sind.
<< an dieser Stelle ist eine Signatur verstorben >>

David Mehre

unregistriert

4

05.08.2009, 21:14

Die Punkte kann ich theoretisch mit D3DXFillTexture in die Textur eintragen, nur das anzeigen klappt noch nicht so ganz, da ich es nicht schaffe, die Textur über das komplette Mesh zu legen, sodass an der obersten linken Ecke des Meshes die Texturkoordinaten (0|0) und an der untersten rechten Ecke (1|1) sind...
Daneben denke ich, dass die Lösung über die Textur zu langsam ist, da ich die Pixel nur über D3DXFillTexture setzten kann, und dabei werden jedesmal alle Pixel durchgegangen...

@Drakon:
Leider weiß ich nicht wirklich, was eine TileMap ist - ich habe etwas gegoogelt (aber leider keine vernünftigen Tutorials zu dem Thema gefunden), aber kann ich mir das wie ein Raster vorstellen, das über das Mesh gelegt wird? Kannst du mir dazu einen Einführenden Text nennen?

Tut mir Leid, wenn bei mir noch alles etwas schwerfällig ist, aber ich bin eben noch ein Anfänger...

drakon

Supermoderator

Beiträge: 6 513

Wohnort: Schweiz

Beruf: Entrepreneur

  • Private Nachricht senden

5

05.08.2009, 21:39

Also ich stelle mir eine Lösung mit einer Textur als sehr kompliziert dar und nicht wirklich performant..

Zu Tilemaps habe ich glaube ich etwas interessantes gefunden:
http://www.tonypa.pri.ee/tbw/start.html
Aber ja. Grundsätzlich ist es ein solches Raster. Halt einfach Tiles (zu Deutsch Ziegel), welche das gesamte Feld darstellen.

David Mehre

unregistriert

6

05.08.2009, 22:16

Gut, wie Tiles funktionieren habe ich denke ich verstanden, allerdings sind diese ja nur bei einer 2D-Oberflächen einsetzbar.
Gibt es auch eine Alternative für 3D-Landschaften?
Wenn das mit 3D zu kompliziert ist, werde ich mich zunächst an 2D halten (da scheinen mit den Tiles ja auch Level-Editoren recht einfach zu programmieren zu sein...).

drakon

Supermoderator

Beiträge: 6 513

Wohnort: Schweiz

Beruf: Entrepreneur

  • Private Nachricht senden

7

05.08.2009, 22:19

Auch in 3D ist die Landaschaft 2D. Sie hat höhen und tiefen, aber ist schlussendlich auch nur ein 2 Dimensionales Netz.

David Mehre

unregistriert

8

05.08.2009, 22:26

Zitat von »"drakon"«

Auch in 3D ist die Landaschaft 2D. Sie hat höhen und tiefen, aber ist schlussendlich auch nur ein 2 Dimensionales Netz.


Das bedeutet, dass die Höhe des Meshes an jedem Tile gar nicht beachtet werden muss, sondern das ganze wie eine Ebene behandelt wird. Mit vorgegebener Länge und Breite des Meshes könnte man dann ja wieder mit ganz "normalen" Tiles arbeiten?

drakon

Supermoderator

Beiträge: 6 513

Wohnort: Schweiz

Beruf: Entrepreneur

  • Private Nachricht senden

dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

10

06.08.2009, 10:00

Mein erster Ansatz wär: Nochmal dein Terrain oder eine entsprechend unterteilte Ebene einfach schwarz mit Vertex Color und Alpha je nach Abstand von deinen Einheiten auf nen entsprechenden Wert gesetzt drüberrendern. Wenn du irgendeinen Sichtbarkeitsalgo hast (z.B. Quadtree oder so) dann kannst du den auch einspannen um die Dinge die ganz im Fog of War (so nennt sich das normal) liegen gar nicht zu zeichnen...

Was die Sache mit der Textur angeht denk ich (wie drakon) dass das ziemlich ineffizient ist...

Werbeanzeige