Tenho um modelo de helicoptero, e quero animar aquela hélice menor, mas estou tendo problema, pois ela gira em trono do eixo do helicóptero.
o codigo que estou usando é esse.
rod += 0.2f;
heliceRod = malha.Meshes[2].ParentBone.Index; //índice dois é a helice menor
malha.Bones[heliceRod].Transform = Matrix.CreateRotationZ(rod);// não sei porque mas o eixo up do modelo é X, o Y sai para tela e o Z é o perpendicular
Matrix[] transforms = new Matrix[this.malha.Bones.Count];
this.malha.CopyAbsoluteBoneTransformsTo(transforms);
foreach (ModelMesh mesh in this.malha.Meshes)
{
foreach (BasicEffect effect in mesh.Effects)
{
int index = mesh.ParentBone.Index;
effect.EnableDefaultLighting();
effect.SpecularColor = new Vector3(0.8f, 0.8f, 0.4f);
effect.SpecularPower = 6;
effect.TextureEnabled = true;
if(index == 3) //transformação do corpo do helicóptero
effect.World = transforms[index] * Matrix.CreateScale(3) * Matrix.CreateRotationY(this.rotacao) * Matrix.CreateTranslation(this.posicao);
else if(index == 6) //transformção da hélice maior
effect.World = transforms[index] * Matrix.CreateScale(3) * Matrix.CreateRotationY(this.rotacao) * Matrix.CreateRotationY(this.rotacaoHelice) * Matrix.CreateTranslation(this.posicao);
else //transformação da helice menor
effect.World = transforms[index] * Matrix.CreateScale(3) * Matrix.CreateRotationY(this.rotacao) * Matrix.CreateTranslation(this.posicao);
effect.View = view;
effect.Projection = projection;
}
mesh.Draw();
}
Como faço para a hélice menor rotacionar em seu próprio eixo e não ao do corpo do helicóptero?
*No modelo 3D ja me certifiquei que o eixo dela está no centro dela. |
|