Operações básicas pra se programar jogos

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;


  Â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
Programação de jogos


     


http://transeberiano.brinkster.net
Porfolio