Matemática aplicada: FPS com Java

Passando pelos meu Feeds aqui, achei um tutorialzinho interessante e resolvi compartilhar com vocês:

Creating a First-Person Shooter Game, Math for Java Game Programmers

É interessante, explica bastante sobre matemática aplicada em câmeras 3D! Vale a pena dar uma olhada! ^^

Matrizes

Eu, há um tempinho atrás, quando estava aprendendo OpenGL, fiquei em dúvida quanto a matrizes. Qual era a sua utilidade no mundo 3D. Então achei este tutorial no site do NeHe e resolvi traduzir, pro pessoal que tem as mesmas dúvidas! Ele é um tutorial bem simples, porém útil.

Tutorial por Paul Frazee (The Rainmaker);

Matrizes

A Matriz Identidade

As Matrizes são o que fazem o mundo 3D funcionar. Sem elas, rotação e translação seria impossível. Teríamos que definir cada vértice na mão! Essa é uma péssima idéia para qualquer programador com experiência 3D. Uma matriz padrão num mundo 3D tem 4×4 elementos.

[1, 0, 0, 0]
[0, 1, 0, 0]
[0, 0, 1, 0]
[0, 0, 0, 1]

Se você multiplicar qualquer ponto pela matriz acima, seria equivalente a multiplicar por 1 (um), nenhuma mudança ocorreria, por isso é chamada de Matriz Identidade. Naturalmente, queremos um pouco mais que isso, então temos também a…

A Matriz de Translação

tx, ty e tz representam os nossos valores de translação:

[ 1,  0,  0, 0]
[ 0,  1,  0, 0]
[ 0,  0,  1, 0]
[tx, ty, tz, 1]

A Matriz de Rotação

Rotação no Eixo X

[ 1,         0,          0, 0]
[ 0, cos(xrot), -sen(xrot), 0]
[ 0, sen(xrot),  cos(xrot), 0]
[ 0,         0,          0, 1]

Rotação no Eixo Y

[ cos(yrot), 0, sen(yrot), 0]
[         0, 1,         0, 0]
[-sen(yrot), 0, cos(yrot), 0]
[         0, 0,         0, 1]

Rotação no Eixo Z

[ cos(zrot), -sin(zrot), 0, 0]
[ sin(zrot),  cos(zrot), 0, 0]
[         0,          0, 1, 0]
[         0,          0, 0, 1]

A Matriz de Escala

sx, sy e sz representam nossos valores de escala (redimensionamento)

[ sx,  0,  0, 0]
[  0, sy,  0, 0]
[  0,  0, sz, 0]
[  0,  0,  0, 1]

Você pode combinar as matrizes multiplicando elas juntas. Transformando um ponto a partir de qualquer uma dessas matrizes, terá o resultado desejado. Repare que a translação muda o eixo para qualquer outra operação. Se você transladar -5, rodando no eixo Y, o eixo central será (0,0,-5).

— // —

Como eu disse, tutorial curto, porém bem útil!

Eu sei que este tutorial é antigo, e que já existem traduções, mas acho que não custa nada mostrar aqui né…

Valeu!