如何解决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() );
我在这里所做的是,我正在绕着原点(太阳)绕月旋转,但是我将其原点转换为任何行星的当前位置...这对我有用。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。