[英]C# XNA Matrices - Calculate moon rotation around axis with matrices
我正在构建一个 3D 模拟。
我正在使用一个 class 来显示不同大小、纹理、速度和轨道的太阳、行星和月亮。 这是我的代码,它完成了计算旋转+旋转的神奇工作
world = Matrix.CreateScale(size,size,size) * Matrix.CreateTranslation(0,0,0) *
Matrix.CreateRotationY(rotation) *
Matrix.CreateTranslation(position) *
Matrix.CreateRotationY(revolution);
现在我想展示围绕地球和其他行星的卫星,但我不知道该怎么做。 就矩阵乘法而言。
复杂之处在于月球的公转是围绕着一个不属于起源并且一直在变化的行星。
怎么做?
在您的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);
我已将orbitAxis
定义为Vector3
。 orbitDistance
, orbitRotation
, orbitScale
和orbitSpin
作为float
的。
我想到了...
将原点翻译成母行星的当前位置
并在更新方法中继续这样做
world = Matrix.CreateScale(size,size,size)
* Matrix.CreateTranslation(0,0,0)
* Matrix.CreateRotationY(rotation)
* Matrix.CreateTranslation(position)
* Matrix.CreateRotationY(revolution);
world *= Matrix.CreateTranslation( parent.getPosition() );
我在这里做的是我围绕原点(太阳)旋转月球,但我将它的原点转换为任何行星的当前位置......这对我有用。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.