Вращение круга OpenTK - PullRequest
       23

Вращение круга OpenTK

1 голос
/ 20 декабря 2011

Я работаю над своим первым проектом с использованием openTk. Я создаю виртуальный аркбол для вращения 3D-модели. Это работает нормально, но мне нужно добавить круг, который не будет вращаться с моделью. Этот круг должен визуализировать аркбол. Мой код для достижения поворота:

private void SetCamera()
{
    GL.MatrixMode(MatrixMode.Modelview);
    Matrix4 scale = Matrix4.Scale(magnification / diameter);
    Matrix4 translation1 = Matrix4.CreateTranslation(-center);
    Matrix4 rotation = Matrix4.CreateFromAxisAngle(axisOfRotation, angleOfRotation*(float)numericSensitivity.Value);
    Matrix4 translation2 = Matrix4.CreateTranslation(0.0f, 0.0f, -1.5f);
    if (rotationChanged)
    {
        oldRotation *= rotation;
        rotationChanged = false;
    }
    modelview = translation1 * scale * oldRotation * translation2;
    GL.LoadMatrix(ref modelview);
}

Поэтому я хотел бы спросить, есть ли способ нарисовать круг, который не будет затронут этим вращением (будет в том же положении на экране).

1 Ответ

0 голосов
/ 04 марта 2012

Если я правильно понимаю ваш вопрос, то все, что вам нужно сделать, это вернуть матрицу вида модели обратно в тождество, прежде чем вы начнете рисовать свой круг.Вы можете легко сделать это, используя функции PushMatrix () и PopMatrix ().Примерно так:

//Draw normal things

GL.MatrixMode(MatrixMode.Modelview);
GL.PushMatrix();
GL.LoadIdentity();

//Draw un-rotated circle

GL.PopMatrix();

PushMatrix () сохраняет текущую матрицу в стек, а PopMatrix () извлекает верхнюю матрицу из этого стека.Это означает, что PopMatrix () вернет вас к вашей обычной повернутой системе координат после того, как вы закончите с кружком.

...