Ponto V!

Home XNA XNA Entrando na terceira dimensão – Parte 2
Alexandre Lobão
Entrando na terceira dimensão – Parte 2Imprimir
Escrito por Alexandre Lobão

Amigos jogadores e desenvolvedores indie!

No artigo passado, vimos rapidamente como carregar um modelo 3D em um programa XNA. Naquela publicação, nós configuramos duas matrizes necessárias para visualizar um modelo 3D: a matriz de Projeção (que indica como a câmera projeta os modelos 3D na tela) e a matriz de Visão (que efetivamente posiciona a câmera no mundo 3D). Neste artigo, veremos como movimentar nosso modelo pela tela.

Para movimentar o modelo que carregamos, vamos precisar configurar a matriz de Mundo – que indica como posicioná-lo dentro da cena 3D (o “mundo” do objeto).

Para isso, primeiramente crie uma matriz identidade de nome “mundo” no início da classe Game1:

Matrix mundo = Matrix.Identity;

Esta matriz será usada no desenho do objeto, bastando incluir no método Draw da classe Game1:

foreach (ModelMesh mesh in modeloNave.Meshes)
{
   foreach (BasicEffect effect in mesh.Effects)
      effect.World = mundo;
   mesh.Draw();
}

Lembrando: “modeloNave” foi criado na coluna do mês passado, para carregar um modelo de nave espacial do jogo “Space Wars”.

Para movimentar a nave, tudo o que precisamos fazer é incluir métodos de translação e rotação no método Update. Por exemplo:

KeyboardState teclado = Keyboard.GetState();

// As setas para a esquerda e direita movem a nave no eixo X 
if (teclado.IsKeyDown(Keys.Left))
   mundo *= Matrix.CreateTranslation(new Vector3(-50f, 0f, 0f));

if (teclado.IsKeyDown(Keys.Right))
   mundo *= Matrix.CreateTranslation(new Vector3(50f, 0f, 0f));

// Roda nos eixos X e Y 
if (teclado.IsKeyDown(Keys.X))
   mundo *= Matrix.CreateRotationX(0.05f);

if (teclado.IsKeyDown(Keys.Y))
   mundo *= Matrix.CreateRotationY(0.05f);

Rodando o programa agora, é possível “controlar” a nave usando as teclas X, Y e as setas para direita e esquerda. Para exercitar, sugiro que vocês experimentem outras operações (mover a nave para cima e para baixo e para frente e para trás, por exemplo...) com o teclado e com o gamepad do XBox 360 – que pode ser ligado em qualquer PC, e utilizado com um código do tipo:

GamePadState gamepad = GamePad.GetState(PlayerIndex.One);
mundo *= Matrix.CreateTranslation(new Vector3(50f*gamepad.ThumbSticks.Left.Y, 0f, 0f));

Confira aqui o código completo da aplicação! Happy coding!


Comentários (0)
Escrever um comentário
Your Contact Details:
Gravatar enabled
Comentário:
[b] [i] [u] [url] [quote] [code] [img]   
:angry::0:confused::cheer:B):evil::silly::dry::lol::kiss::D:pinch::(:shock:
:X:side::):P:unsure::woohoo::huh::whistle:;):S:!::?::idea::arrow:
Security
Por favor coloque o código anti-spam que você lê na imagem.
LAST_UPDATED2  

Busca

Linguagens

Twitter