Fl_Gl_Windowの派生クラスによるOpenGL描画†OpenGLを描画するウィンドウを作成したい場合は, Fl_Gl_Window の派生クラスを作り,draw関数をオーバーライドしてOpenGL描画命令を記述すればよい. キーボードやマウス入力を扱う場合はhandle関数をオーバーライドする (こちらはFl_Gl_Windowでのキーボード・マウス入力参照). インクルードとライブラリファイル†インクルードファイルは以下. #include <FL/Fl_Gl_Window.H> ライブラリファイルは,Releaseの場合, fltkgl.lib Debugの場合, fltkgld.lib Fl_Gl_Window派生クラスの生成†Fl_Gl_Windowを派生したクラス(ここではrxFlGLWindowとする)を作る.
Fl_Gl_Window::draw関数, Fl_Gl_Window::resize関数をオーバーライドしている. それぞれ,ウィンドウ再描画時,ウィンドウリサイズ時に呼ばれるイベントハンドラである. そして,public関数のInitGL,Resize,Displayはそれぞれ,OpenGL初期化,視体積設定,描画を行う関数で,draw,resize関数から呼ばれる. draw関数の例は以下,
context_valid() はOpenGLコンテキストの生成フラグを返す. OpenGLコンテキストが生成されたときにフラグが0となり,draw関数が呼ばれた後に自動的に1に設定される. フラグは以下のように手動で設定することもできる. context_valid(1); context_valid()の値をチェックして,OFF(=0)ならばOpenGL初期化を行う. 一方, valid() はOpenGLコンテキストリサイズフラグを返すため, valid()の返値をチェックして,OFF(=0)ならばリサイズ処理(OpenGL視体積設定など)を行う. valid()はOpenGLコンテキストが生成されたとき,および,リサイズされたときにフラグOFF(返値が0)となり, draw関数が呼ばれた後に自動的にフラグON(返値が1)になる. フラグは以下のように手動で設定することもできる. valid(1); resize関数の例は以下,
ウィンドウ位置x,y, サイズw,hの4引数を取り,ウィンドウリサイズ時に呼ばれる. リサイズ処理をこちらに書いても良い. エントリ関数†main関数の例は以下,
rxFlGLWindowウィンドウを生成した後, mode関数によりOpenGL capabilityを設定している (OpenGL capabilityの設定はここ参照). 再描画/フレームバッファ関連の関数†再描画のための関数は以下.これらの関数は基本的にはdraw関数外で使われる.
draw関数内で用いるフレームバッファ処理関数は以下.
ソースコード†上記例のソースコードは以下(Viual Studio 2010用プロジェクトファイル含む). 実行結果は以下. |