Я моделирую солнечную систему, используя C#. Я использую граф сцены. Таким образом, у планет есть родители, по которым они вращаются. Но я не могу понять математику правильно. Если я изменю скорость вращения родителя (солнца), то это повлияет на детей (земля).
class Planet : Mesh
{
private float a = 0;
private float b = 0;
const float PI = 3.1415926535f; // PI
private float dist = 0;
private float rotaSpeed;
private float orbitSpeed;
private Matrix4 transform;
private Matrix4 staticTransform;
public Planet(Shader shader, float scale, float distance, float rspeed, float ospeed, String textureName) : base("../../assets/sphere.obj",shader, new Texture(textureName), Matrix4.CreateScale(scale))
{
dist = distance;
rotaSpeed = rspeed;
orbitSpeed = ospeed;
staticTransform = Matrix4.CreateScale(1.0f);
}
public void setTransform(Matrix4 transform)
{
staticTransform = transform;
}
public override void Render(Matrix4 screenTransform, float frameDuration)
{
Matrix4 orbit = Matrix4.CreateTranslation(new Vector3(dist, 0, 0));
Matrix4 circle = Matrix4.CreateRotationY(a);
// update rotation
a += rotaSpeed * frameDuration;
if (a > 2 * PI) a -= 2 * PI;
transform = circle * orbit;
base.Render(transform * screenTransform, frameDuration);