|
 | | |
|
| |  |   |  |  | |  |  | |  |  | |  |  | |  | |
 | | |
| 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. |
|
|
|  |  | | |
| 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 |
|
|
|  |  | | |
| 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 |
|
|
|  |  | | |
| Re: Girar um modelo em seu proprio eixo |
|
|
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 |
|
|
|  |  | | |
| 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
|
|
|
|
|  |  | |  |  | |  |  | |  |
|
|
  |
| | |
|
|
|  |
 |  |
|