J'essaie de calculer quelles tuiles une unité particulière peut "voir" si elle fait face à une certaine direction sur une carte de tuiles (dans une certaine plage et un certain angle de face). La manière la plus simple serait de dessiner un certain nombre de tuiles vers l'extérieur et de diffuser des rayons sur chaque tuile. Cependant, j'espère quelque chose d'un peu plus efficace. Une image dit mille mots:
Le point rouge est l'unité (qui est tournée vers le haut). Mon objectif est de calculer les tuiles jaunes. Les blocs verts sont des murs (les murs sont entre les carreaux, et il est facile de vérifier si vous pouvez passer entre deux carreaux). La ligne bleue représente quelque chose comme la méthode de "raycasting" dont je parlais, mais je préfère ne pas avoir à le faire.
EDIT: Les unités ne peuvent faire face qu'au nord / sud / est / ouest (0, 90, 180 ou 270 degrés) et FoV est toujours à 90 degrés. Devrait simplifier certains calculs. Je pense qu'il y a une sorte d'algorithme récursif / basé sur la pile / basé sur la file d'attente, mais je ne peux pas vraiment le comprendre.
Merci!
Réponses:
Oui, j'ai trouvé un document de recherche!
En termes de coût de calcul, le Shadow Mapping semble être un gagnant assez clair.
L'algorithme utilisé peut être trouvé ici et une implémentation C # peut être trouvée ici , bit pertinent ci-dessous.
la source