質問
私はOpenGLで学校のゲームを書いています。さらにいくつかの同様の課題があるので、OpenGLで一般的なことをするための小さなフレームワークを作りたいと思います。以前にいくつかの簡単なゲームを作成しましたが、通常、IOクラスに分解して、画面への入力と描画、メインゲームループ/ロジックのゲームクラス、ゲームにあるオブジェクトのクラスを処理します。
SDLを使用する前に、私の質問は、これがOpenGLでこれを実現する正しい方法ですか?私はすでにいくつかのトラブルに出くわしました。 IOクラスに、ウィンドウの初期化、シーンの描画、マウスのクリックを処理してもらいたいです。したがって、コンストラクターは次のように見えました:
IO::IO()
{
currWindowSize[0] = DEF_WIDTH;
currWindowSize[1] = DEF_HEIGHT;
glutInitDisplayMode( GLUT_DOUBLE | GLUT_RGBA );
glutInitWindowPosition( INIT_WINDOW_POSITION[0], INIT_WINDOW_POSITION[1] );
glutInitWindowSize( currWindowSize[0], currWindowSize[1] );
glutCreateWindow( "TEST" );
setUp();
glutDisplayFunc(drawScene);
glutMainLoop();
}
でも、 drawScene
クラスメソッドです。クラスの方法を渡す方法はありますか glutDisplayFunc()
静的にすることなく?
解決
残念ながら glutDisplayFunc()
服用しません void*
ポインターで、オブジェクトのコンテキストを偽造できます。静的変数を使用して正しいIOインスタンスを呼び出すことができる静的関数を作成する必要があります。
ただし、パターンにもわずかな問題があります。私の知る限りでは、 glutMainLoop()
GLUTコンテキストを終了するまで戻らないでください。したがって、実際には戻らないコンストラクターがあるため、プログラムのフローは不合理です。その呼び出しを別のものに移動する必要があります run()
クラスの方法。
(個人的にはGLFWを使用します。これは、Mainloopを書く必要がありますが、Callback Mess全体を過剰に回避します。)
他のヒント
最後に解決策はかなり簡単でした。次のことを確認することで、ルックアップの値をデータフィールドとして表示する列をデータフィールドとして表示する必要がありました(これらの追加フィールドのそれぞれを表示するための列を追加):
これはライブラリ内の列と、通常の単一のテキストフィールドのように機能するデータソースと、ルックアップではありません。
SDLを使用する前に、私の質問は、これがOpenGLでこれを実現する正しい方法ですか?
私はむしろむかつきを完全にバイパスしたい(OpenGLの内側の内臓とOSウィンドウシステムインターフェイスを学びたい場合)。さらに、GLUTはiPhoneでサポートされていません(将来このプラットフォームをターゲットにしたい場合)。
したがって、アイデアは使用することです WGL
Windowsで、 GLX
Linuxと CGL
OS Xで