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