13

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 関数が見つかりません。そのような機能は単に実装されていませんか?

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

まず、幅と高さを格納する 2 つの変数が必要です。

int width, height;

次に、リファレンスの 14 ページに記載されているとおりです。

glfwSetWindowPos(width / 2, height / 2);

そしてボーナスとして、あなたはそれから呼び出すことができます

glfwGetWindowSize(&width, &height);

これは void 関数であり、値を返しませんが、以前に宣言された 2 つの変数を更新します。そのため、メインループまたはウィンドウ リシェイプ コールバック関数に配置します。

これは、 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 に答える