Estou trabalhando em um Roguelike e, para isso, criei um algoritmo de campo de visão (FOV) de rastreamento de raios / vazamento que consiste em plotar as linhas de Bresenham em todos os pontos de um círculo sólido. É livre de artefatos (e razoavelmente eficiente), mas está faltando um requisito importante meu: simetria (se você pode ver um monstro, ele também deve ser capaz de vê-lo).
Aqui está um exemplo do comportamento não simétrico do meu código. Na imagem da esquerda, estou em um canto (blocos vermelhos 'X' = parede). Consigo ver os ladrilhos do canto superior direito. No entanto, se eu mudar para um desses blocos (imagem à direita), não consigo mais ver o bloco de onde vim.
Acho que posso estar atrás de uma forma de campo de visão permissivo , mas apenas porque o artigo de Roguebasin sugeriu que ele permitia simetria. Existem meios alternativos para obter simetria?
fonte
Respostas:
Parece que você inclui um quadrado quando pode ver qualquer ponto nele enquanto o olho está no único ponto fixo.
No entanto, você deve incluir apenas um quadrado quando puder vê-lo no meio (supondo que o "olho" também esteja no meio). Ou você pode desenhar raios de cada canto do quadrado inicial para os cantos do quadrado testado, se puder ver algum de qualquer um deles incluir.
O ponto principal é que a caixa de acerto de um quadrado também deve ser todos os locais onde o olho deve estar.
fonte