Как изменить разрешение области просмотра в OpenTK

Я использую OpenTk GameWindow. Я добавляю настройки графики в свой проект. Но я не могу понять, как правильно изменить разрешение или войти или выйти из полноэкранного режима во время выполнения.

Может кто-нибудь объяснить правильную процедуру изменения разрешения и/или полноэкранного режима во время работы игры.

Использование WindowState = WindowState.Fullscreen; и WindowState = WindowState.Fullscreen; работает, но они изменяют область просмотра, и настройка GL.Viewport не исправляет этого.

В настоящее время я меняю разрешение монитора с помощью DisplayDevice.GetDisplay(DisplayIndex.Default).ChangeResolution


person KobraX22    schedule 02.05.2011    source источник


Ответы (2)


Если вы не в полноэкранном режиме, вы можете изменить размер окна, просто вызвав свойство Size объекта GameWindow. Вы уже знаете о свойстве WindowState.

Главное, что вам нужно сделать, это переопределить метод OnResize в вашем классе GameWindow. Это автоматически вызывается при изменении размера окна игры, в том числе при переводе его в полноэкранный режим. Оттуда вы можете повторно инициализировать окно просмотра.

Например, в проекте, который я сейчас тестирую, следующий код правильно изменяет размер окна просмотра всякий раз, когда я изменяю размер окна или перемещаюсь в/из полноэкранного режима. Хотя я не использую переключение разрешения при переходе в полноэкранный режим, я полагаю, что он отлично сработает и для этого. В приведенном ниже примере yoursizehere имеет размер 640x640 и масштабируется с использованием метода GL.Ortho, чтобы соответствовать размеру GameWindow.ClientSize. (Я новичок в OpenTK (и в OpenGL в этом отношении), поэтому мне еще предстоит многому научиться самому, но нижеприведенное работает для меня)

protected override void OnResize(EventArgs e)
{
  base.OnResize(e);

  GL.Viewport(this.ClientRectangle);
  GL.MatrixMode(MatrixMode.Projection);
  GL.LoadIdentity();
  GL.Ortho(0, yoursizehere.Width, yoursizehere.Height, 0, -1, 0);
}

Приведенный выше пример относится к порту 2D-просмотра, с которым я сейчас экспериментирую... у меня достаточно проблем, чтобы понять концепции OpenGL в двух измерениях, не говоря уже о трех!

Надеюсь это поможет

person Richard Moss    schedule 30.05.2011

Посмотрите на конструкторы GameWindow. Большинство из них принимают ширину и высоту в качестве своих первых параметров. Полноэкранный режим задается параметром GameWindowFlags.

person kvark    schedule 02.05.2011
comment
Я знаю, как настроить окно при создании GameWindow. Мне нужно знать, как изменить разрешение и полноэкранный режим во время игры. - person KobraX22; 03.05.2011
comment
@КобраX22. ой, извините, я неправильно понял ваш вопрос. Вы пробовали форум OpenTK? - person kvark; 03.05.2011