C#XNA矩阵-用矩阵计算绕轴的月球旋转

问题描述

|| 我正在建立3D模拟。 我正在使用一个类来显示具有不同大小,纹理,速度和轨道的太阳,行星和月亮。这是我的代码,可以很好地完成计算旋转+旋转的工作
world = Matrix.CreateScale(size,size,size) * Matrix.CreateTranslation(0,0) * 
 Matrix.CreateRotationY(rotation) * 
 Matrix.CreateTranslation(position) * 
 Matrix.CreateRotationY(revolution); 
size是我用来分别缩放对象的变量 旋转是我的变量,用于绕其自身的轴旋转对象 position是我的变量,用于将行星定位在轨道上,新的Vector3(240,0) 旋转是我围绕行星绕原点旋转的变量 现在我想要显示地球和其他行星周围的卫星,但我只是不知道该怎么做。在矩阵乘法方面。 复杂的是,月球的旋转围绕着一颗不在原点上并且一直在变化的行星。 怎么做 ?     

解决方法

        在
Draw
方法中,绘制了要绕其旋转的行星/月球之后:
Matrix satellite = Matrix.Identity
                 * Matrix.CreateScale(orbitScale)
                 * Matrix.CreateRotationY(orbitSpin)
                 * Matrix.CreateTranslation(0f,orbitDistance,0f)
                 * Matrix.CreateFromAxisAngle(orbitAxis,orbitRotation);
effect.View = satellite * camera.View;
因此,您可以使用
Update
方法执行以下操作:
orbitRotation += MathHelper.PiOver2 * (float)gameTime.ElapsedGameTime.TotalSeconds;
orbitRotation = MathHelper.WrapAngle(orbitRotation);
orbitSpin += MathHelper.TwoPi * (float)gameTime.ElapsedGameTime.TotalSeconds;
orbitSpin = MathHelper.WrapAngle(orbitSpin);
我已将“ 5”定义为“ 6”。
orbitDistance
orbitRotation
orbitScale
orbitSpin
float
。     ,        我想到了... 将原点翻译成母行星的当前位置 并继续使用update方法
world = Matrix.CreateScale(size,size,size)
        * Matrix.CreateTranslation(0,0) 
        * Matrix.CreateRotationY(rotation)
        * Matrix.CreateTranslation(position)
        * Matrix.CreateRotationY(revolution); 

world *= Matrix.CreateTranslation( parent.getPosition() );
我在这里所做的是,我正在绕着原点(太阳)绕月旋转,但是我将其原点转换为任何行星的当前位置...这对我有用。