Je travaille sur un Roguelike, et pour cela j'ai créé un algorithme de champ de vision (FoV) de lancer de rayons / lancer qui consiste à tracer des lignes de Bresenham à chaque point d'un cercle plein. Il est sans artefact (et raisonnablement efficace), mais il manque une exigence importante à moi: la symétrie (si vous pouvez voir un monstre, il doit également être capable de vous voir).
Voici un exemple du comportement non symétrique de mon code. Dans l'image de gauche, je me tiens dans un coin (blocs rouges «X» = mur). Je peux voir les tuiles en haut à droite. Cependant, si je passe à l'une de ces tuiles (image de droite), je ne peux plus voir la tuile d'où je viens.
Je pense que je pourrais être après une forme de champ de vision permissif , mais seulement parce que l'article de Roguebasin a suggéré qu'il permettait la symétrie. Existe-t-il d'autres moyens d'obtenir la symétrie?
la source
Réponses:
Il semble que vous incluez un carré lorsque vous pouvez voir n'importe quel point alors que l'œil est au point fixe unique.
Cependant, vous ne devez inclure un carré que lorsque vous pouvez en voir le milieu (en supposant que "l'œil" se trouve également au milieu). Ou vous pouvez dessiner des rayons de chaque coin du carré de départ vers les coins du carré testé, si vous pouvez en voir n'importe lequel, puis l'inclure.
Le point clé est que la hitbox d'un carré doit également être tous les emplacements où l'œil doit être.
la source