# Ray casting

Ray casting é um algoritmo utilizado em tratamento de imagem, e que tem como objectivo a sintetização de imagens 3D. Pode-se definir como sendo o primeiro estágio do algoritmo de Raytracing, diferenciando-se deste na sua simplicidade já que o Ray casting não é um método recursivo.
O termo "Ray Casting" foi introduzido por Scott Roth enquanto estava no General Motors Research Labs em 1978 a 1980. O seu artigo "Ray Casting for Modeling Solids", descreve objetos sólidos modelados pela combinação de sólidos primitivos, como blocos e cilindros, usando os operadores de conjunto (+), interseção (&) e diferença (-). A ideia geral de usar esses operadores binários para modelagem sólida é em grande parte devido ao grupo de modelagem geométrica de Voelcker e Requicha na Universidade de Rochester.

## Descrição

O algoritmo de Ray casting recorre ao lançamento de raios a partir do observador de forma a perceber qual a distância que estão os objectos que compõem a cena. Tal como no Raytracing, os raios são emitidos a partir do observador, ou seja no sentido inverso do que acontece na natureza, a fim de poupar recursos computacionais. Se assim não fosse, o processamento seria incomportável e haveria grande desperdício de recursos, já que a maior parte dos raios de luz que partem da fonte de luz, não chegam ao observador.
O Ray casting é uma técnica que permite remover ou ignorar as superfícies escondidas numa imagem utilizando, para isso, as informações obtidas a partir das primeiras intersecções encontradas pelos raios lançados a partir do observador.
Ray casting não é sinónimo de Raytracing mas pode ser entendido como sendo uma versão abreviada e significativamente mais rápida do que o algoritmo de Raytracing. Ambos são algoritmos de ordenação de imagens utilizados em computação gráfica para sintetizar cenas tridimensionais em imagens a duas dimensões, pelo lançamento de raios desde o observador até à fonte de luz. Ray casting ao contrário do Raytracing não é um método recursivo, ou seja, não recorre ao lançamento de raios secundários a partir das intersecções dos raios primários com os objectos, eliminando assim o custo computacional exigido para o cálculo de reflexões, refracções e zonas de sombra. No entanto todos estes elementos podem ser simulados recorrendo a outros métodos matemáticos. Por tudo isto o Ray casting é considerado o método mais apropriado para a renderização de jogos 3D em tempo-real.
Na natureza, os raios de luz percorrem o espaço até encontrarem, eventualmente, uma superfície que interrompe o seu progresso. Durante a viagem do raio de luz uma de três coisas pode acontecer: absorção, reflexão ou refração. A superfície pode refletir toda ou apenas uma parte do raio numa ou mais direção. Também pode absorver parte deste raio de luz, resultando numa perda de intensidade do raio refletido/refratado. A soma das componentes absorvidas, refletidas e refratadas tem que ser igual ao inicial. Não podemos, por exemplo, refletir 70% da luz e absorver 50% já que assim teríamos 120%.

## Primeiros jogos a utilizar Ray casting

Nos primeiros jogos de tiro em primeira pessoa, o raycasting era usado para renderizar eficientemente um mundo 3D a partir de um campo de jogo 2D a usar uma varredura unidimensional simples sobre a largura horizontal da tela. Os primeiros jogos de tiro em primeira pessoa usavam o raycasting 2D como uma técnica para criar um efeito 3D a partir de uma mundo 2D. Enquanto o mundo parece 3D, o jogador não pode olhar para cima ou para baixo ou apenas em ângulos limitados com distorção de cisalhamento. Este estilo de renderização elimina a necessidade de disparar um raio para cada pixel no quadro, como é o caso dos motores modernos; uma vez que o ponto de acerto é encontrado, a distorção da projeção é aplicada à textura da superfície e uma coluna vertical inteira é copiada do resultado para o quadrado.

### Jogos

* Wolfenstein 3D
* ShadowCaster
* Comanche (série de jogos eletrônicos)
* Doom (jogo eletrônico de 1993)