sábado, 23 de julho de 2011

XNA 4.0 - Criar Jogos para PC e XBOX 360 - Parte 3+

Bem, o último tutorial foi longo, criamos 3 linhas mas só conseguimos ver 2 delas e o que é pior, demos cores a elas e mesmo assim estavam brancas. O lado bom é que já fizemos todo o básico para desenhar o que quisermos e agora é mais fácil, simples e produtivo. Vamos criar o nosso ponto de visão(quase que uma câmera) para poder ver melhor os nossos resultados.

No nosso arquivo "Game1.cs" vamos procurar o método LoadContent(){} vamos colocar o seguinte código no final do método, mas dentro dele :)

effect.View = Matrix.CreateLookAt(new Vector3(2.0f, 2.0f, 2.0f), Vector3.Zero, Vector3.Up);

Repare que ao escrever "effect.View = Matrix.CreateLookAt(" vai aparecer uma pequena janela com a descrição do que o método MatrixCreateLookAt faz, então por essa ajuda ele dirá que a primeira parte é a nossa cameraPosition(Posição) ao completar a posição e inserir uma virgula o VS nos indicará que o proximo argumento é a nossa cameraTarget(Alvo) e por fim o cameraUpVector, que dirá a câmera onde será o "pra cima";

Continuando insira o seguinte código:

effect.Projection = Matrix.CreatePerspectiveFieldOfView(MathHelper.ToRadians(45.0f), aspectRatio, 1.0f, 10.0f);

Vou colocar uma imagem para melhor entendimento.


Nesse ultimo código criamos exatamente isso que você ver acima, e se você usou o truque acima de ver o que o método faz(Essa janela faz parte do Intelisense) terá o primeiro argumento, o ânglulo de visão da câmera, o segundo como o aspectRatio e nearPlane e farPlane. O XNA só desenhará o que estiver entre o nearPlane e o farPlane, o que tiver fora desses dois planos será ignororado na hora de desenhar.

E para completar o código coloque essa linha na parte da variáveis que criamos no meodo LoadContent()

float aspectRatio = (float)GraphicsDevice.Viewport.Width / (float)GraphicsDevice.Viewport.Height;

Depure o código e se tudo estiver certo você verá os 3 eixos criados por outro ângulo. Volte a primeira linha que adicionamos no tutorial e mude a posição da câmera. onde tem o "...new Vector3(2.0f, 2.0f, 2.0f)..." mude os 2.0f para outros númeoro, como 5.0f, 2.5f, 0,01f... o primeiro sempre será a posição X, o segundo a posição Y e a terceira a posição Y.


o XNA usa o conceito Right-Handed a coordenada X fica positiva para a direita, a coordenada Y para cima e a Z fica positiva quando está "saindo da tela". Voce pode mudar o alvo da câmera e para fazer isso basta substituir o próximo argumento de "Vecto.Zero" para "new Vector3(1.0f, 0.0f,0.0f)" nesse exemplo o alvo será a ponta do eixo X. Mude alguns numeros aqui tambem e fique craque em Coordenadas 3D.

Vamos dar cor aos nossos eixos. Coloque o seguinte fragmento de código no fim do método LoadContent()

effect.VertexColorEnabled = true;

Depure e agora você já pode ver nossas linhas coloridas, volte um pouco no código até onde declaramos os vértices, o ultimo argumento é a cor. Apague e ao digitar "Color" e apertar "." vai aparecer um série de cores para escolher.

Vamos agora rotacionar nossos eixos, é bem simples. Va até o método Update(), apague a linha "//TODO ..." e coloque em seu lugar:

effect.World *= Matrix.CreateRotationY(0.01f);

Ao declarar "Matrix" e depois "." você poserá escolher "CreateRotationX", "CreateRotationY", "CreateRotationZ", você pode tambem mudar a velocidade alterando o "0.01f" e pode juntar mais de uma rotação ao mesmo tempo bastando multiplicar novamente. O meu ficou assim:

effect.World *= Matrix.CreateRotationY(0.01f) * Matrix.CreateRotationX(0.001f);

No arquivo que vou disponibilizar fiz a seguintes alterações. No metodo Draw() substitui o

GraphicsDevice.Clear(Color.Black);

Agora o fundo tem a cor preta.

Aumentei o valor da variável vertexCount para 22.

Adicionei mais 4 Eixos X e mais 4 Eixos Y

//Mais grades X
vertices[6] = new VertexPositionColor(new Vector3(-axisLenght, 0.0f, -2.0f), Color.White);
vertices[7] = new VertexPositionColor(new Vector3(axisLenght, 0.0f, -2.0f), Color.White);

vertices[8] = new VertexPositionColor(new Vector3(-axisLenght, 0.0f, -1.0f), Color.White);
vertices[9] = new VertexPositionColor(new Vector3(axisLenght, 0.0f, -1.0f), Color.White);

vertices[10] = new VertexPositionColor(new Vector3(-axisLenght, 0.0f, 1.0f), Color.White);
vertices[11] = new VertexPositionColor(new Vector3(axisLenght, 0.0f, 1.0f), Color.White);

vertices[12] = new VertexPositionColor(new Vector3(-axisLenght, 0.0f, 2.0f), Color.White);
vertices[13] = new VertexPositionColor(new Vector3(axisLenght, 0.0f, 2.0f), Color.White);

//Mais grades Y
vertices[14] = new VertexPositionColor(new Vector3(-2.0f, 0.0f, -axisLenght), Color.White);
vertices[15] = new VertexPositionColor(new Vector3(-2.0f, 0.0f, axisLenght), Color.White);

vertices[16] = new VertexPositionColor(new Vector3(-1.0f, 0.0f, -axisLenght), Color.White);
vertices[17] = new VertexPositionColor(new Vector3(-1.0f, 0.0f, axisLenght), Color.White);

vertices[18] = new VertexPositionColor(new Vector3(1.0f, 0.0f, -axisLenght), Color.White);
vertices[19] = new VertexPositionColor(new Vector3(1.0f, 0.0f, axisLenght), Color.White);

vertices[20] = new VertexPositionColor(new Vector3(2.0f, 0.0f, -axisLenght), Color.White);
vertices[21] = new VertexPositionColor(new Vector3(2.0f, 0.0f, axisLenght), Color.White);

Por fim aumentei a a variável axisLenght para 2.0f e mudei a posição da câmera para "new Vector3(5.0f, 5.0f, 5.0f)". No método Draw() alterei o ultimo valor de "GraphicsDevide.DrawPrimitives()" de 22 para 50.

Sinta-se livre para mudar o que quiser, nessa altura você ja deve saber o que mudar.

Link para o projeto : http://www.megaupload.com/?d=O22IPJPH

Nenhum comentário:

Postar um comentário