Jestem nowy w XNA i tworzę prostą grę. Przepraszam, że to jest naprawdę proste, ale nie mogę znaleźć na nim żadnej pomocy. W grze jest statek, który zrobiłem z Blenderem, i chcę móc sterować statkiem poprzez możliwość obracania osi X, Y i Z statku. Oto kod, który mam:Obracanie modelu 3D w XNA
protected override void Draw(GameTime gameTime)
{
GraphicsDevice.Clear(Color.CornflowerBlue);
RotationMatrix = Matrix.CreateRotationY(MathHelper.PiOver2) * Matrix.CreateRotationY (rotationY) * Matrix.CreateRotationX(rotationX) * Matrix.CreateRotationZ(rotationZ);
Matrix shipTransformMatrix = RotationMatrix * Matrix.CreateTranslation(ship.Position);
DrawModel(ship.Model, shipTransformMatrix, ship.Transforms);
// TODO: Add your drawing code here
base.Draw(gameTime);
}
public void DrawModel(Model model, Matrix modelTransform, Matrix[] absoluteBoneTransforms)
{
//Draw the model, a model can have multiple meshes, so loop
foreach (ModelMesh mesh in model.Meshes)
{
//This is where the mesh orientation is set
foreach (BasicEffect effect in mesh.Effects)
{
effect.World = absoluteBoneTransforms[mesh.ParentBone.Index] * modelTransform;
effect.Projection = projectionMatrix;
effect.View = viewMatrix;
}
//Draw the mesh, will use the effects set above.
mesh.Draw();
}
}
Spowoduje to obrócenie statku, ale nie wzdłuż osi statku. Jeśli obrócę oś Y (zmieniając wartość obrotu Y), statek obróci się wzdłuż swojej osi Y. Ale jeśli obrócę oś X lub Z, statek obraca się zgodnie z osiami X i Z świata, a nie własnymi. Jak mogę to zrobić, aby statek obracał się na własnych osiach? Czy muszę robić coś innego z macierzami? Dzięki
Dzięki. Jak zdefiniować oś obrotu mojego statku w narzędziu CreateFromAxisAngle? Próbowałem, a wszystko co robiłem, to przekształcenie mojego statku. Jak zapisać rotację w macierzy? Właśnie to próbowałem zrobić. – davidsbro
Tak się składa, że napisałem o tym blogu. http://stevehazen.wordpress.com/2010/02/15/matrix-basics-how-to-step-away-fo--storing-an-orientation-as-3-angles/ –
Dzięki. Znalazłem link, który umieściłeś tuż przed tym, jak go podniosłeś. lol. Przeczytałem to i udało mi się rozwiązać problem. Dziękuję Ci! To było naprawdę jasne i bardzo pomocne – davidsbro