Cursos / Jogos Digitais / Matemática Aplicada a jogos / Aula
Nesta aula, vimos o que são vetores e as diferentes operações que podemos realizar entre eles. Agora discutiremos uma das aplicações que temos disso no mundo dos jogos: a identificação da orientação de personagens através de vetores.
Em jogos, podemos representar a direção em que um personagem está olhando através de um vetor, partindo do centro do personagem e orientado no sentido em que o personagem está virado, como na Figura 26. Essa representação só é possível graças à propriedade dos vetores de, diferentemente das retas, possuírem uma orientação.
Saber a direção em que um personagem está virado é útil de diversas maneiras. Podemos, através disso, lançar projéteis adequadamente ou mesmo exibir apenas o que estiver na vista do personagem, tudo dependendo do que o seu jogo precisar! No entanto, há mais uma aplicação específica que é bem interessante e envolve um outro conceito visto ao longo desta aula: a utilização do produto escalar para identificar se dois personagens estão virados na mesma direção.
Em alguns jogos, como PayDay 2, diversos NPCs possuem uma modificação de comportamento ao “perceber” a presença do jogador, olhando diretamente para eles. Eles podem falar algo, ativar alarmes ou qualquer outro comportamento que tenha sido programado. No entanto, como podemos descobrir se um personagem está de fato olhando na direção de outro personagem? Isso pode ser feito com uma das propriedades do dot product.
Como visto anteriormente, os personagens normalmente possuem um vetor indicando a direção em que estão olhando. Conhecendo os vetores de ambos os personagens, podemos então utilizar o dot product para descobrir se ambos estão apontando na mesma direção ou em direções opostas: o resultado será positivo caso ambos estejam na mesma direção e negativo caso não!
Se os personagens estiverem posicionados um de frente para o outro, seus vetores de orientação apontarão em sentidos opostos, como na Figura 27.
Mas só isso não resolve o nosso problema. Se os personagens estiverem de costas um para o outro o resultado do produto escalar também será negativo, uma vez que os dois vetores de orientação estarão, ainda assim, apontando em direções opostas. Para solucionar esse problema, podemos encontrar o vetor que parte de um personagem e chega no outro, como mostrado na Figura 28.
Vamos considerar aqui o vetor que parte do Personagem 1 para o Personagem 2. Vimos no início desta aula que a representação de um vetor $\vec{v}$ que vai de um ponto $(a_1, b_1)$ ao ponto $(a_2, b_2)$ é $\vec{v} = (a_2 - a_1, b_2 - a_2 )$. É importante notar que aqui a ordem dessas coordenadas faz toda a diferença. O vetor $\vec{v}$ acima parte do ponto $(a_1, b_1)$ em direção ao ponto $(a_2, b_2) $, e não o contrário.
Se o ponto $(a_1, b_1)$ representa a localização do personagem 1 e o ponto $(a_2, b_2)$ representa a localização do personagem 2, o vetor $\vec{v}$ sai do personagem 1 em direção ao personagem 2, como mostra a Figura 29.
Conhecendo o vetor $\vec{v}$ e os vetores $\vec{u_1}$ e $\vec{u_2}$ que representam, respectivamente, a orientação dos personagem 1 e 2, temos todos os elementos necessários para detectar as posições relativas dos personagens.
O produto interno dos dois vetores $\vec{u_1}$ e $\vec{u_2}$ nos traz uma primeira informação: os personagens estão de frente para o mesmo lado ou para lados opostos.
Caso o produto $\vec{u_1} \cdot \vec{u_2}$ tenha um valor positivo, apenas um dos personagens pode enxergar o outro, pois ambos olham na mesma direção. Para verificar se o personagem 1 pode ver o personagem 2 basta analisar o sinal do produto $\vec{u_1} \cdot \vec{v}$.
Se $\vec{u_1} \cdot \vec{v} > 0$, o personagem 1 está olhando na direção do personagem 2, pois seu vetor de orientação tem o mesmo sentido do vetor que parte dele para o outro personagem. Se $\vec{u_1} \cdot \vec{v} < 0$, o personagem 2 está olhando na direção do personagem 1, pois o vetor $\vec{u_2}$, que tem o mesmo sentido de $\vec{u_1}$, aponta em direção oposta ao vetor $\vec{v}$. Veja a Figura 31.
Caso o produto $\vec{u_1} \cdot \vec{u_2}$ tenha um valor negativo, os personagens estão virados para direções opostas. Resta-nos saber se de costas ou de frente um para o outro. Para determinar isso basta, novamente, avaliar o produto $\vec{u_1} \cdot \vec{v}$.
Se $\vec{u_1} \cdot \vec{v} > 0$, o personagem 1 está virado na direção do personagem 2, pois os vetores $\vec{u_1}$ e $\vec{v}$ apontam na mesma direção. Se $\vec{u_1} \cdot \vec{v} < 0$, o personagem 1 está de costas para o personagem 2. Como ambos apontam em direção opostas, o personagem 2 também está de costas para o persnagem 1 e ambos não se enxergam. Veja as duas situações na Figura 32.
Com poucos conceitos sobre vetores foi possível solucionar esse problema. Ao longo da aula muitas outras ferramentas foram apresentadas, cujas aplicações ficarão mais claras com conceitos de física aplicada a jogos e até mesmo motores de jogos.
Versão 5.3 - Todos os Direitos reservados