如何改变OpenTK的视口分辨率

本文关键字:OpenTK 视口 分辨率 改变 何改变 | 更新日期: 2023-09-27 17:54:29

我正在使用OpenTk GameWindow。我一直在为我的项目添加图形设置。但我不知道如何正确地改变分辨率或在运行时进入或退出全屏模式。

有人能解释一下在游戏运行时改变分辨率和/或全屏状态的正确程序吗?

使用WindowState = WindowState.Fullscreen;WindowState = WindowState.Fullscreen;工作,但他们修改了查看区域和设置GL.Viewport不能修复它。

我目前正在用DisplayDevice.GetDisplay(DisplayIndex.Default).ChangeResolution更改监视器分辨率

如何改变OpenTK的视口分辨率

如果您不是全屏模式,您可以通过简单地调用GameWindow对象上的Size属性来调整窗口的大小。您已经知道WindowState属性。

您需要做的主要事情是覆盖GameWindow类中的OnResize方法。当你的游戏窗口被调整大小,包括设置为全屏模式时,它会自动被调用。从那里,你可以重新初始化你的视口。

例如,在我目前正在测试的项目中,每当我调整窗口大小或进入/退出全屏模式时,以下代码都会正确地调整视图端口的大小。虽然我在切换到全屏模式时没有使用分辨率切换,但我认为它也可以很好地工作。在下面的示例中,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的概念已经够麻烦的了,更不用说三维了!

希望能有所帮助

看看GameWindow的构造器。它们大多以宽度和高度作为第一参数。全屏是通过GameWindowFlags参数设置的