Saudações, leitor. Esta é a segunda parte da série de tradução "Tutorial de Ray-Casting para desenvolvimento de jogos e outros fins". A segunda parte é precedida da primeira, que também pode ser visualizada .
Vamos começar! Vamos continuar!
Limitações de ray-casting
A tecnologia de fundição de raios é rápida porque usa algumas restrições geométricas. Na maioria dos casos, as paredes são sempre perpendiculares ao chão (observe que isso não se aplica aos cantos entre as próprias paredes).
A partir daqui, temos outra limitação: o ponto de vista não pode girar ao longo do eixo Z. Por quê? Imagine o oposto: a rotação é permitida. Neste caso, as paredes podem inclinar-se e, consequentemente, perde-se a vantagem de desenhar secções verticais dessas mesmas paredes. A limitação de rotação é uma das razões pelas quais a projeção de raios não pode ser considerada 3D completo.

A tecnologia de ray-casting permite que o jogador se mova para frente / para trás e vire à direita / esquerda, mas não gire em torno do eixo Z (este tipo de rotação é chamado de roll (se o eixo Y for vertical, então a rotação ao longo dele é inclinação, e ao longo do eixo X é guinada, - aprox. . por.)).
Etapa 1: criando o ambiente
A fim de renderizar o trabalho de lançamento de raio, criaremos uma cena de labirinto com base nas seguintes restrições geométricas:
64x64x64 ( , , 2. , ). , , , , .

, ( - ), - . .

. , . - .
2.
, , . :
, (FOV - Field Of View),
, . FOV, , . FOV 90° . , . 60°, ( - FOV). , 32 . , , . ( -, : 2.4 / 1.7 = 1.41 - . .).

, - , . , , FOV - . .
, X-, Y- . 3 POV (point of view) .
, - (1, 2), 45 , FOV , . ( 64x64 ).

POV, . - FOV - . - . .
, , . 320 200 - , .. VG .
POV , , .

FOV .
:

, ( ): 320200 (160, 100). " ". - . .
( , , , , ).

FOV 60. 320 , 60° 320 , , 1 60 / 320 . - . .

FOV . , 320 / 2 = 160 : 90°, 60° / 2 = 30° 90° - 30° = 60° . (277), . - . .
:
() = 320200
(160, 100)
= 277
= 60 / 320
(Às vezes, nos referiremos ao ângulo entre raios sucessivos como o ângulo entre colunas adjacentes. Mais tarde, esse ângulo será usado para iterar dentro do loop de uma coluna para a outra. A distância até o plano de projeção será necessária para o dimensionamento.)