Fórum Sharpgames
 
 
  Forum  Criação de Jogo...  Algoritmos  Girar um modelo em seu proprio eixo
Anterior Anterior
 
Próximo Próximo
Nova Entrada 15/7/2008 15:15
  jkleber
8 tópicos
Sem Ranking


Girar um modelo em seu proprio eixo 
Olá a todos, estou com um outro problema, eu preciso girar o meu modelo em seu proprio eixo, como o volante de um carro.

Mas só estou consiguindo fazer ele girar como se estivesse em orbita em torno de alguma coisa, ele não gira "parado". Eu estava tentando usar o Matrix.CreateRotationY(rotacao) , dentro do effect.World, mas fica com o problema que eu disse anteriormente


Se alguem puder me ajudar eu agradeço.
 
Nova Entrada 15/7/2008 21:51
  lucianoJose
125 tópicos
Iniciante


Re: Girar um modelo em seu proprio eixo 
 jkleber escreveu
Olá a todos, estou com um outro problema, eu preciso girar o meu modelo em seu proprio eixo, como o volante de um carro.

Mas só estou consiguindo fazer ele girar como se estivesse em orbita em torno de alguma coisa, ele não gira "parado". Eu estava tentando usar o Matrix.CreateRotationY(rotacao) , dentro do effect.World, mas fica com o problema que eu disse anteriormente


Se alguem puder me ajudar eu agradeço.


rapaz, acho que seria legal se você liberasse alguns pedaços de código . Pq podem ser várias coisas - "é complicado dá um tiro no escuro".

MCP, MCTS. Administrador do SharpGames. Game Developer(C++) at Manifesto Game Studio Meu Blog: lucianojosefj.spaces.live.com
 
Nova Entrada 16/7/2008 12:08
  jkleber
8 tópicos
Sem Ranking


Re: Girar um modelo em seu proprio eixo 
Então até agora eu consegui uma melhora eu usei este codigo:

 Matrix gameWorldRotation = Matrix.CreateRotationX(MathHelper.ToRadians(0)) *
        Matrix.CreateRotationY(MathHelper.ToRadians(0)) * Matrix.CreateRotationZ(MathHelper.ToRadians(rotacao));
 effect.View = Matrix.CreateLookAt(posicaoCamera, posicaoModelo, Vector3.Up) * gameWorldRotation;
Dai ele até rotaciona, mas é como se o eixo estivesse na borda do obejto, mas eu preciso que ele fique no meio para apenas girar em seu lugar, sem se deslocar
 
Nova Entrada 16/7/2008 13:06
  lucianoJose
125 tópicos
Iniciante


Re: Girar um modelo em seu proprio eixo 
Modificado Por lucianoJose  em 16/7/2008 10:07:46)
 jkleber escreveu
Então até agora eu consegui uma melhora eu usei este codigo:

 Matrix gameWorldRotation = Matrix.CreateRotationX(MathHelper.ToRadians(0)) *
        Matrix.CreateRotationY(MathHelper.ToRadians(0)) * Matrix.CreateRotationZ(MathHelper.ToRadians(rotacao));
 effect.View = Matrix.CreateLookAt(posicaoCamera, posicaoModelo, Vector3.Up) * gameWorldRotation;
Dai ele até rotaciona, mas é como se o eixo estivesse na borda do obejto, mas eu preciso que ele fique no meio para apenas girar em seu lugar, sem se deslocar


Só queria fazer uma observações:
 
Quanto â 1º instrução:

 Matrix gameWorldRotation = Matrix.CreateRotationX(MathHelper.ToRadians(0)) *
        Matrix.CreateRotationY(MathHelper.ToRadians(0)) * Matrix.CreateRotationZ(MathHelper.ToRadians(rotacao));

A ordem ideal pra tu fazer as transformações quanto a Rotação é: Y * X * Z, entao ficaria:

Matrix gameWorldRotation = Matrix.CreateRotationY(MathHelper.ToRadians(0))  * Matrix.CreateRotationX(MathHelper.ToRadians(0)) 
        * Matrix.CreateRotationZ(MathHelper.ToRadians(rotacao));


De qualquer forma você poderia "enxugar" isso deixando assim: Matrix gameWorldRotation = Matrix.CreateRotationZ(MathHelper.ToRadians(rotacao);


Quanto à 2º instrução:

 effect.View = Matrix.CreateLookAt(posicaoCamera, posicaoModelo, Vector3.Up) * gameWorldRotation;

Pq você tá multiplicando a matrix.CreateLookAt(...) pela
gameWorldRotation?

Eu dei uma testada nisso e o resultado obtido foi meio diferente... Geralmente, na Matriz de Visão(View) o pessoal só deixa assim:

 effect.View = Matrix.CreateLookAt(posicaoCamera, <cameraTarget>, Vector3.Up);

E quanto ao 2º valor da lista de parametros que você tá passando no metodo CreateLookAt. Você tá passando a posição do modelo pq? Esse valor deveria ser um Vector normalizado a fim de informar aonde a camera está apontando... Dá uma testada com a instrução abaixo(um exemplo) e vai alterando conforme a necessidade:

 effect.View = Matrix.CreateLookAt(posicaoCamera, Vector2.Zero, Vector3.Up);


Se as dicas acima nao te ajudaram de alguma forma, acho que a bronca pode ser em outro local, de qualquer forma dá um feedback pra gente depois...

MCP, MCTS. Administrador do SharpGames. Game Developer(C++) at Manifesto Game Studio Meu Blog: lucianojosefj.spaces.live.com
 
Nova Entrada 20/7/2008 14:11
  jkleber
8 tópicos
Sem Ranking


Re: Girar um modelo em seu proprio eixo 
Então, para ser sincero eu só coloquei multiplicando no  matrix.CreateLookAt porque foi o unico que chegou no resultado mais satisfatório, mas você poderia me dizer qual o local correto onde eu deveria colocar??, só consigo fazer aquela rotação que eu te falei, eu roda como se estivesse em orbita de alguma coisa, não gira em seu próprio eixo.

Quanto a colocar a posição do modelo, eu coloquei porque fica mais facil pra eu me organizar o que estou fazendo.

e obrigado pela dica do createrotation
 
Anterior Anterior
 
Próximo Próximo
  Forum  Criação de Jogo...  Algoritmos  Girar um modelo em seu proprio eixo
AdSense

Amazon

Logos do XBox 360, XNA e Games For Windows
Copyright 2008 por SharpgamesPolítica de Privacidade  |  Termos de Uso