Fl_Gl_Windowの派生クラスによるOpenGL描画
をテンプレートにして作成
[
トップ
|
新規
|
一覧
|
検索
|
最終更新
|
ヘルプ
]
開始行:
----
#contents
----
*Fl_Gl_Windowの派生クラスによるOpenGL描画 [#pcc129c1]
OpenGLを描画するウィンドウを作成したい場合は,
[[Fl_Gl_Window:http://www.fltk.org/doc-1.3/classFl__Gl__W...
の派生クラスを作り,draw関数をオーバーライドしてOpenGL描...
キーボードやマウス入力を扱う場合はhandle関数をオーバーラ...
(こちらは[[Fl_Gl_Windowでのキーボード・マウス入力]]参照).
***インクルードとライブラリファイル [#af4cdbcf]
インクルードファイルは以下.
#include <FL/Fl_Gl_Window.H>
ライブラリファイルは,Releaseの場合,
fltkgl.lib
Debugの場合,
fltkgld.lib
***Fl_Gl_Window派生クラスの生成 [#z9d51cc1]
Fl_Gl_Windowを派生したクラス(ここではrxFlGLWindowとする)...
#code(C){{
class rxFlGLWindow : public Fl_Gl_Window
{
public:
//! コンストラクタ
rxFlGLWindow(int x_, int y_, int w_, int h_, const char*...
: Fl_Gl_Window(x_, y_, w_, h_, l)
{
}
public:
void InitGL(void);
void Resize(int w, int h);
void Display(void);
private:
void draw(void)
void resize(int x_, int y_, int w_, int h_);
};
}}
[[Fl_Gl_Window::draw:http://www.fltk.org/doc-1.3/classFl_...
[[Fl_Gl_Window::resize:http://www.fltk.org/doc-1.3/classF...
それぞれ,ウィンドウ再描画時,ウィンドウリサイズ時に呼ば...
そして,public関数のInitGL,Resize,Displayはそれぞれ,Open...
[[draw:http://www.fltk.org/doc-1.3/classFl__Gl__Window.ht...
#code(C){{
void rxFlGLWindow::draw(void)
{
if(!context_valid()) InitGL();
if(!valid()) Resize(w(), h());
Display(); // OpenGL描画
}
}}
[[context_valid():http://www.fltk.org/doc-1.3/classFl__Gl...
はOpenGLコンテキストの生成フラグを返す.
OpenGLコンテキストが生成されたときにフラグが0となり,draw...
フラグは以下のように手動で設定することもできる.
context_valid(1);
context_valid()の値をチェックして,OFF(=0)ならばOpenGL初...
一方,
[[valid():http://www.fltk.org/doc-1.3/classFl__Gl__Window...
はOpenGLコンテキストリサイズフラグを返すため,
valid()の返値をチェックして,OFF(=0)ならばリサイズ処理(Op...
valid()はOpenGLコンテキストが生成されたとき,および,リサ...
draw関数が呼ばれた後に自動的にフラグON(返値が1)になる.
フラグは以下のように手動で設定することもできる.
valid(1);
[[resize:http://www.fltk.org/doc-1.3/classFl__Gl__Window....
#code(C){{
void rxFlGLWindow::resize(int x_, int y_, int w_, int h_)
{
Fl_Gl_Window::resize(x_, y_, w_, h_);
//Resize(w_, h_); // リサイズ処理はこちらにおいてもよい.
}
}}
ウィンドウ位置x,y, サイズw,hの4引数を取り,ウィンドウリサ...
リサイズ処理をこちらに書いても良い.
***エントリ関数 [#vca1faf2]
main関数の例は以下,
#code(C){{
int main(int argc, char *argv[])
{
Fl::scheme("gtk+");
Fl::visual(FL_DOUBLE | FL_RGB);
Fl::get_system_colors();
glutInit(&argc, argv); // GLUTを初期化(glutSolidTeapotを...
rxFlGLWindow *window = new rxFlGLWindow(100, 100, 480...
window->mode(FL_RGB | FL_ALPHA | FL_DOUBLE | FL_DEPTH);
window->end();
window->show(argc, argv);
return Fl::run();
}
}}
rxFlGLWindowウィンドウを生成した後,
[[mode:http://www.fltk.org/doc-1.3/classFl__Gl__Window.ht...
(OpenGL capabilityの設定は[[ここ>FLTK#u751a447]]参照).
***再描画/フレームバッファ関連の関数 [#e877a76a]
再描画のための関数は以下.これらの関数は基本的にはdraw関...
-[[Fl_Widget::redraw:http://www.fltk.org/doc-1.3/classFl_...
ウィジットの再描画がスケジューリングされる.つまり,glutP...
-[[Fl_Gl_Window::redraw_overlay:http://www.fltk.org/doc-1...
オーバーレイ描画用のredraw
draw関数内で用いるフレームバッファ処理関数は以下.
-[[Fl_Gl_Window::flush:http://www.fltk.org/doc-1.3/classF...
フレームバッファの強制フラッシュ(フレームバッファの内容を...
-[[Fl_Gl_Window::swap_buffers:http://www.fltk.org/doc-1.3...
ダブルバッファ時のフロント,バックバッファの入れ替え
***ソースコード [#qbaaa04e]
上記例のソースコードは以下(Viual Studio 2010用プロジェク...
#ref(fltk_simple_opengl.zip)
実行結果は以下.
#ref(fltk_opengl_window2.jpg,,50%)
終了行:
----
#contents
----
*Fl_Gl_Windowの派生クラスによるOpenGL描画 [#pcc129c1]
OpenGLを描画するウィンドウを作成したい場合は,
[[Fl_Gl_Window:http://www.fltk.org/doc-1.3/classFl__Gl__W...
の派生クラスを作り,draw関数をオーバーライドしてOpenGL描...
キーボードやマウス入力を扱う場合はhandle関数をオーバーラ...
(こちらは[[Fl_Gl_Windowでのキーボード・マウス入力]]参照).
***インクルードとライブラリファイル [#af4cdbcf]
インクルードファイルは以下.
#include <FL/Fl_Gl_Window.H>
ライブラリファイルは,Releaseの場合,
fltkgl.lib
Debugの場合,
fltkgld.lib
***Fl_Gl_Window派生クラスの生成 [#z9d51cc1]
Fl_Gl_Windowを派生したクラス(ここではrxFlGLWindowとする)...
#code(C){{
class rxFlGLWindow : public Fl_Gl_Window
{
public:
//! コンストラクタ
rxFlGLWindow(int x_, int y_, int w_, int h_, const char*...
: Fl_Gl_Window(x_, y_, w_, h_, l)
{
}
public:
void InitGL(void);
void Resize(int w, int h);
void Display(void);
private:
void draw(void)
void resize(int x_, int y_, int w_, int h_);
};
}}
[[Fl_Gl_Window::draw:http://www.fltk.org/doc-1.3/classFl_...
[[Fl_Gl_Window::resize:http://www.fltk.org/doc-1.3/classF...
それぞれ,ウィンドウ再描画時,ウィンドウリサイズ時に呼ば...
そして,public関数のInitGL,Resize,Displayはそれぞれ,Open...
[[draw:http://www.fltk.org/doc-1.3/classFl__Gl__Window.ht...
#code(C){{
void rxFlGLWindow::draw(void)
{
if(!context_valid()) InitGL();
if(!valid()) Resize(w(), h());
Display(); // OpenGL描画
}
}}
[[context_valid():http://www.fltk.org/doc-1.3/classFl__Gl...
はOpenGLコンテキストの生成フラグを返す.
OpenGLコンテキストが生成されたときにフラグが0となり,draw...
フラグは以下のように手動で設定することもできる.
context_valid(1);
context_valid()の値をチェックして,OFF(=0)ならばOpenGL初...
一方,
[[valid():http://www.fltk.org/doc-1.3/classFl__Gl__Window...
はOpenGLコンテキストリサイズフラグを返すため,
valid()の返値をチェックして,OFF(=0)ならばリサイズ処理(Op...
valid()はOpenGLコンテキストが生成されたとき,および,リサ...
draw関数が呼ばれた後に自動的にフラグON(返値が1)になる.
フラグは以下のように手動で設定することもできる.
valid(1);
[[resize:http://www.fltk.org/doc-1.3/classFl__Gl__Window....
#code(C){{
void rxFlGLWindow::resize(int x_, int y_, int w_, int h_)
{
Fl_Gl_Window::resize(x_, y_, w_, h_);
//Resize(w_, h_); // リサイズ処理はこちらにおいてもよい.
}
}}
ウィンドウ位置x,y, サイズw,hの4引数を取り,ウィンドウリサ...
リサイズ処理をこちらに書いても良い.
***エントリ関数 [#vca1faf2]
main関数の例は以下,
#code(C){{
int main(int argc, char *argv[])
{
Fl::scheme("gtk+");
Fl::visual(FL_DOUBLE | FL_RGB);
Fl::get_system_colors();
glutInit(&argc, argv); // GLUTを初期化(glutSolidTeapotを...
rxFlGLWindow *window = new rxFlGLWindow(100, 100, 480...
window->mode(FL_RGB | FL_ALPHA | FL_DOUBLE | FL_DEPTH);
window->end();
window->show(argc, argv);
return Fl::run();
}
}}
rxFlGLWindowウィンドウを生成した後,
[[mode:http://www.fltk.org/doc-1.3/classFl__Gl__Window.ht...
(OpenGL capabilityの設定は[[ここ>FLTK#u751a447]]参照).
***再描画/フレームバッファ関連の関数 [#e877a76a]
再描画のための関数は以下.これらの関数は基本的にはdraw関...
-[[Fl_Widget::redraw:http://www.fltk.org/doc-1.3/classFl_...
ウィジットの再描画がスケジューリングされる.つまり,glutP...
-[[Fl_Gl_Window::redraw_overlay:http://www.fltk.org/doc-1...
オーバーレイ描画用のredraw
draw関数内で用いるフレームバッファ処理関数は以下.
-[[Fl_Gl_Window::flush:http://www.fltk.org/doc-1.3/classF...
フレームバッファの強制フラッシュ(フレームバッファの内容を...
-[[Fl_Gl_Window::swap_buffers:http://www.fltk.org/doc-1.3...
ダブルバッファ時のフロント,バックバッファの入れ替え
***ソースコード [#qbaaa04e]
上記例のソースコードは以下(Viual Studio 2010用プロジェク...
#ref(fltk_simple_opengl.zip)
実行結果は以下.
#ref(fltk_opengl_window2.jpg,,50%)
ページ名: