Wie kann ich die Sichtfeldsymmetrie in einem Roguelike sicherstellen?

10

Ich arbeite an einem Roguelike und habe dafür einen FoV-Algorithmus (Ray Tracing / Casting Field-of-View) erstellt, der darin besteht, Bresenham-Linien zu jedem Punkt in einem durchgezogenen Kreis zu zeichnen. Es ist artefaktfrei (und ziemlich effizient), aber es fehlt eine wichtige Anforderung von mir: Symmetrie (wenn Sie ein Monster sehen können, muss es Sie auch sehen können).

Geben Sie hier die Bildbeschreibung ein

Hier ist ein Beispiel für das nicht symmetrische Verhalten meines Codes. Im linken Bild stehe ich in einer Ecke (rote 'X'-Blöcke = Wand). Ich kann die oberen rechten Kacheln sehen. Wenn ich jedoch zu einer dieser Kacheln wechsle (rechtes Bild), kann ich die Kachel, von der ich stamme, nicht mehr sehen.

Ich glaube, ich bin vielleicht auf der Suche nach einer Form des zulässigen Sichtfelds, aber nur, weil der Artikel im Roguebasin vorschlug, Symmetrie zuzulassen. Gibt es alternative Mittel, um Symmetrie zu erhalten?

Herr smith
quelle
1
Stellen Sie einfach sicher, dass sich der Augenpunkt in derselben Position befindet wie die Position, in die Sie den Strahl werfen, wenn Sie die Sichtbarkeit testen.
MichaelHouse

Antworten:

8

Es scheint, dass Sie ein Quadrat einfügen, wenn Sie einen beliebigen Punkt darin sehen können, während sich das Auge am einzelnen Fixpunkt befindet.

Sie sollten jedoch nur dann ein Quadrat einfügen, wenn Sie die Mitte sehen können (vorausgesetzt, das "Auge" befindet sich ebenfalls in der Mitte). Oder Sie können Strahlen von jeder Ecke des Startquadrats zu den Ecken des getesteten Quadrats zeichnen, wenn Sie eines von einem sehen können, dann schließen Sie ein.

Der entscheidende Punkt ist, dass die Hitbox eines Quadrats auch alle Stellen sein sollte, an denen sich das Auge befinden muss.

Ratschenfreak
quelle