Рассчитать орбиту pl anet с помощью матриц - PullRequest
0 голосов
/ 20 июня 2020

Я моделирую солнечную систему, используя 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);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...