Estou tentando calcular quais peças uma determinada unidade pode "ver" se estiver voltada para uma determinada direção em um mapa de peças (dentro de um determinado intervalo e ângulo de face). A maneira mais fácil seria desenhar um certo número de peças para fora e transmitir raios para cada peça. No entanto, espero algo um pouco mais eficiente. Uma imagem diz mil palavras:
O ponto vermelho é a unidade (que está voltada para cima). Meu objetivo é calcular os azulejos amarelos. Os blocos verdes são paredes (as paredes são entre peças, e é fácil verificar se você pode passar entre duas peças). A linha azul representa algo como o método "raycasting" de que eu estava falando, mas prefiro não ter que fazer isso.
EDIT: As unidades só podem estar voltadas para norte / sul / leste / oeste (0, 90, 180 ou 270 graus) e o FoV é sempre 90 graus. Deve simplificar alguns cálculos. Eu estou pensando que existe algum tipo de algoritmo recursivo-ish / baseado em pilha / baseado em fila, mas não consigo entender direito.
Obrigado!
Respostas:
Yay eu encontrei um trabalho de pesquisa!
Em termos de custo computacional, o Shadow Mapping parece um vencedor bastante claro.
O algoritmo usado pode ser encontrado aqui e uma implementação em C # pode ser encontrada aqui , bit relevante abaixo.
fonte