13

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

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

glutInitWindowPosition ( 
                         (glutGet(GLUT_SCREEN_WIDTH)-RES_X)  / 2,
                         (glutGet(GLUT_SCREEN_HEIGHT)-RES_Y) / 2 
                       );

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

4

3 回答 3

12

怎么样glfwGetDesktopMode,我想这就是你想要的。

例子:

GLFWvidmode return_struct;

glfwGetDesktopMode( &return_struct );

int height = return_struct.Height;

对于 GLFW,他们使用glfwGetVideoMode,它具有不同的调用,但返回结构可以以相同的方式使用。

于 2012-07-04T20:55:13.690 回答
8

首先你需要两个变量来存储你的宽度和高度。

int width, height;

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

glfwSetWindowPos(width / 2, height / 2);

作为奖励,你可以打电话

glfwGetWindowSize(&width, &height);

这是一个 void 函数,不返回任何值,但是它将更新两个先前声明的变量.. 所以将它放在 mainloop 或窗口重塑回调函数中。

您可以在第 15 页的官方手册中验证这一点

于 2012-07-14T22:15:39.457 回答
4

这可能会帮助某人...

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

m_Width并且m_Height是具有窗口宽度和高度的变量。

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

于 2015-05-18T14:48:58.963 回答