OpenTK - Как вращать 2D объект

Я пытаюсь вращать 2D-объекты в моем проекте OpenTK.

Происходит то, что объекты после повернутого объекта вращаются, и я не хочу, чтобы они это делали.

Как сбросить вращение после того, как я уже повернул один объект?

      protected override void OnRenderFrame(FrameEventArgs e)
       {
           GL.Clear(ClearBufferMask.ColorBufferBit | ClearBufferMask.DepthBufferBit);
           GL.MatrixMode(MatrixMode.Projection);
           GL.LoadIdentity();
           GL.Ortho(0, game.Width, game.Height, 0, -1, 4);

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

          drawObject();
          GL.Rotate(180, Vector3d.UnitZ);
          drawObject(); // Object I want to rotate
          GL.Rotate(-180, Vector3d.UnitZ);
          drawObject(); // I don't want this object to be rotated, but it does. How do I fix this?
}

Спасибо!

1 ответ

Решение

В конвейере с фиксированной функцией операции Rotate не добавляются. Вместо этого второй заменяет первый (до тех пор, пока между ними нет операции PushMatrix). То, что вы сейчас рисуете, это первый объект, повернутый на 180 градусов, а второй объект на -180 градусов.

Возвращаясь к вашему вопросу: если вы замените второй вызов Rotate на LoadIdentity, текущая матрица модели будет сброшена в единичную матрицу, удалив все преобразования.

drawObject();
GL.Rotate(180, Vector3d.UnitZ);
drawObject();
GL.LoadIdentity();
drawObject();

Примечание: все преобразования сбрасываются здесь, если вы хотите сохранить перевод и масштабирование, вы можете попробовать GL.Rotate(0, Vector3d.UnitZ);

Другие вопросы по тегам