使用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
);
我找不到任何会返回屏幕大小或宽度的glfw函数。这样的功能根本没有实现吗?
答案 0 :(得分:8)
glfwGetDesktopMode
如何,我认为这就是你想要的。
示例:
GLFWvidmode return_struct;
glfwGetDesktopMode( &return_struct );
int height = return_struct.Height;
答案 1 :(得分:5)
首先你需要两个变量来存储你的宽度和高度。
int width, height;
然后如reference.
第14页所述glfwSetWindowPos(width / 2, height / 2);
然后作为奖励,您可以致电
glfwGetWindowSize(&width, &height);
这是一个void函数,并且不返回任何值,但它会更新两个先前声明的变量..所以将它放在mainloop或window reshape回调函数中。
您可以在第15页的官方手册here中对此进行验证。
答案 2 :(得分:2)
这可能对某人有帮助......
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
是具有窗口宽度和高度的变量。
答案 3 :(得分:0)
// Settings
int SCR_WIDTH = 800;
int SCR_HEIGHT = 600;
char TITLE[] = "Stack Overflow";
/*..Initilized..*/
const GLFWvidmode* mode = glfwGetVideoMode(glfwGetPrimaryMonitor());
GLFWwindow* window = glfwCreateWindow(SCR_WIDTH,SCR_HEIGHT,TITLE,nullptr,nullptr);
// Because (x,y) starts from the top left corner, We got to subtract our window size.
glfwSetWindowPos(window,(mode->width-SCR_WIDTH)/2,(mode->height-SCR_HEIGHT)/2);
//divided by two to center.