Estoy trabajando en un Roguelike, y para ello he creado un algoritmo de campo de visión (FoV) de trazado de rayos / proyección que consiste en trazar líneas de Bresenham en cada punto de un círculo sólido. No tiene artefactos (y es razonablemente eficiente), pero le falta un requisito importante: la simetría (si puedes ver un monstruo, también debe poder verte).
Aquí hay un ejemplo del comportamiento no simétrico de mi código. En la imagen de la izquierda estoy parado en una esquina (bloques rojos 'X' = pared). Puedo ver los mosaicos superiores derechos. Sin embargo, si me muevo a uno de esos mosaicos (imagen derecha), ya no puedo ver el mosaico del que provengo.
Creo que podría estar buscando una forma de campo de visión permisivo , pero solo porque el artículo de Roguebasin sugirió que permitía la simetría. ¿Hay medios alternativos para obtener simetría?
fuente
Respuestas:
Parece que incluye un cuadrado cuando puede ver cualquier punto en él mientras el ojo está en el único punto fijo.
Sin embargo, solo debe incluir un cuadrado cuando puede ver el centro (suponiendo que el "ojo" también esté en el medio). O puede dibujar rayos desde cada esquina del cuadrado inicial a las esquinas del cuadrado probado, si puede ver alguno desde cualquiera, entonces incluya.
El punto clave es que el hitbox de un cuadrado también debe ser todos los lugares donde debe estar el ojo.
fuente