Operações básicas pra se programar jogos

Os agentes da TClasseDominante responsáveis pelo perverso sistema educacional vigente são incapazes de terem uma visão pragmática.
A decorrência natural é que 8 em cada 10 assuntos que se estuda de Matemática é o mais puro lixo. Inutilidades que uma mente normal rejeita logo quando o sujeito põe os pés fora da escola.
Isso ocorre porque esse perverso sistema é orientado à seleção e não à aprendizagem. O que é muito diferente.
Pra comprovar é só passear pelos materiais de Álgebra Linear à disposição do internauta.
Pra se aprender algo é necessário pagar algum curso. Aí sim. Aí eles montam uma grade de verdade e param com a palhaçada.
Ou seja, o internauta iniciante em programação de jogos deve saber que 80% de sua Matemática será inútil aqui.


Cada tipo de jogo requer obviamente um conjunto básico de operações.
A maioria requer o tratamento mínimo de→

● Sistema cartesiano (2D e 3D)
● Escala, rotação, translação de primitivas e modelos
● Vetores
● Ângulo entre vetores
● Normal/perpendicular a um plano
● Posicionamento da câmera
● Trajetória de tiros
● Detecção e reação de colisão
● Perseguição de oponentes
● Seleção, recorte, fôrma (stenciling)
● Reflexão, espelhamento
● Texturização
● Iluminação de modelos


Especificamente pra ambiente 3D→

● Nódulos
● Mapas, mundos, modelos, skyboxes, billboards, Curvas de Bezier
● Esqueletização
● Formatos .x, .md2, .bsp, .dbo




Ângulo entre 2 vetores em 2D

A figura abaixo mostra uma nave posicionada em O que aponta pra A.
Se for rotacioná-la de forma a apontar pra D deve-se encontrar o ângulo interno ou o externo.
Nessa situação alfa é o interno e teta é o externo.



O produto escalar pode ser usado pra encontrar o menor ângulo entre dois vetores (ou seja, o ângulo interno).



Essa coisa mal encarada pode ser traduzida pra→
Angulo = ArcCos (ProdutoEscalar (OA; OD) / Modulo (OA)*Modulo (OD))

A característica dela é que retorna um ângulo apenas entre 0º e 180º.
Se um jogo 2D requerer um lança-míssil com capacidade de mapear completamente os oponentes à sua volta (conseguir rotacionar em 360º), será necessário saber a direção do giro.
O determinante indica a orientação entre dois vetores 2D.
Se for um valor positivo, indica que formam um ângulo maior que 0º e menor que 180º. Do contrário, formam um maior que 180º e menor que 360º.



Ou seja→
Direcionamento = OA.x * OD.y  -  OA.y * OD.x

Ângulo entre dois vetores em 2D
function Obter_ProdutoEscalar (V1, V2: TPonto2D): TReal;

begin
  Result:= V1.X*V2.X + V1.Y*V2.Y;
end;

function Obter_Modulo (Valor: TPonto2D): TReal;

begin
  with Valor do
    Result:= SqRt (X*X + Y*Y);
end;

function Obter_Determinante (V1, V2: TPonto2D): TReal;

begin
  Result:= V1.X*V2.Y - V1.Y*V2.X;
end;

function Obter_Angulo (V1, V2: TPonto2D): TInteiro;

begin
  Result:= Trunc (RadToDeg (ArcCos (Obter_ProdutoEscalar (V1, V2) / (Obter_Modulo (V1)*Obter_Modulo (V2)))));
  if Obter_Determinante (V1, V2) < 0 then
    Result:= 360-Result;
end;




Chaves
Ângulo entre vetores
Multiplicação de vetor por escalar
Módulo dum vetor (Norm)
Produto Escalar (Dot product)
Produto Vetorial (Cross product)
Perpendicular Dot
Signed angle
Vector orientation
LookAt





http://transeberiano.brinkster.net