GLFW获得屏幕高度/宽度?

Byz*_*ian 10 c++ opengl glfw

使用freeglut图书馆玩了一段时间的OpenGL,我决定将GLFW用于我的下一个培训项目,因为我被告知GLUT仅用于学习目的,不应该专业使用.我将lib链接到我的NetBeans项目没有问题,使用mingw32 4.6.2编译得很好.

但是,我在尝试将窗口定位在屏幕中心时遇到了困难.在freeglut下,我以前用过:

glutInitWindowPosition ( 
                         (glutGet(GLUT_SCREEN_WIDTH)-RES_X)  / 2,
                         (glutGet(GLUT_SCREEN_HEIGHT)-RES_Y) / 2 
                       );
Run Code Online (Sandbox Code Playgroud)

我找不到任何会返回屏幕大小或宽度的glfw函数.这样的功能根本没有实现吗?

Tim*_*Tim 8

怎么样glfwGetDesktopMode,我觉得这就是你想要的.

例:

GLFWvidmode return_struct;

glfwGetDesktopMode( &return_struct );

int height = return_struct.Height;
Run Code Online (Sandbox Code Playgroud)


iKl*_*lsR 5

首先,您需要两个变量来存储宽度和高度.

int width, height;
Run Code Online (Sandbox Code Playgroud)

然后如参考文献第14页所述.

glfwSetWindowPos(width / 2, height / 2);
Run Code Online (Sandbox Code Playgroud)

然后作为奖励你可以打电话

glfwGetWindowSize(&width, &height);
Run Code Online (Sandbox Code Playgroud)

这是一个void函数,并且不会返回任何值,但它会更新两个先前声明的变量..所以将它放在mainloop或window reshape回调函数中.

您可以在官方手册验证这个位置第15页.


Yah*_*hia 5

这可能会帮助某人...

void Window::CenterTheWindow(){
            GLFWmonitor* monitor = glfwGetPrimaryMonitor();
            const GLFWvidmode* mode = glfwGetVideoMode(monitor);
            glfwSetWindowPos(m_Window, (mode->width - m_Width) / 2, (mode->height - m_Height) / 2);
}
Run Code Online (Sandbox Code Playgroud)

m_Widthm_Height是具有窗口宽度和高度的变量。

参考: http: //www.glfw.org/docs/latest/monitor.html

  • 此解决方案是正确的,但是当主监视器中未打开窗口时,此解决方案将不起作用。 (2认同)