前回、前々回で試してみたGLUTでOpenGLだが、1ファイルにごちゃごちゃと書いてわからなくなってきたので、ファイルを分けて整理+改良してみた。構成は以下の通り。
- gl.hpp : GLObjectクラスを定義、色、原点の定数を定義
- glutil.hpp, glutil.cpp : GLColorクラス、GLPositionクラスを定義、実装
- glbasicshape.hpp, glbasicshape.cpp : GLLineクラス、GLTriangleクラス、GLSquareクラス、GLCircleクラスを定義、実装
- glwindow.hpp, glwindow.cpp : GLWindowProperty構造体、GLWindowクラスを定義、実装
要は過去2回で作ったものを整理整頓したということ。過去のものからの改善点は次の通り。
- 座標や色指定で数字をごちゃごちゃと引数に渡すのめんどうなので、GLColorクラスとGLPositionクラスで管理することにした
- 白、黒、赤、緑、青のGLColorオブジェクトを定義した
- 原点を表すGLPositionオブジェクトを定義した
- 基本図形として直線(GLLine)、三角形(GLTriangle)、四角形(GLSquare)を追加した
- 円(GLCircle)のメンバ変数radius_はちゃんと半径を表すようにした
- 基本図形のモード指定が可能になった
- ウインドウのタイトルやサイズなどを管理する構造体(GLWindowProperty)を追加して、Window作成時の引数をすっきりさせた
- 描画関数をフレンド関数からメンバ変数の関数ポインタに変更して、変な依存関係をマシにした
試した感じではひとまず意図したとおりに動いているようだ。今後はこれをベースにいろいろ試してみようと思う。今思いつく限りの改善点は次の通り。
- 相変わらずドキュメントがないのがいけてないと思う
- 相変わらずエラー時の挙動とかを考えていないのがいまいち
- 座標系を設定する
- マウスイベントとキーボードイベントぐらいは扱えるようにする
- 3Dを扱いたい
- アニメーションを扱いたい
- ファイルに出力したい
- 共有ライブラリ化とmakeとかで簡単にビルドできるようにしたい
ちなみにソースはこちら→ Dgl.tar.gzをダウンロード
$ g++ -o testDGL testDGL.cpp glutil.cpp glwindow.cpp glbasicshape.cpp -framework GLUT -framework OpenGL
とすればビルドできるはず。ちなみに実行するとこんな感じ。
構成要素の詳細 :
- 自作OpenGLクラス(DGLLib)詳細 その1 gl.hpp
- 自作OpenGLクラス(DGLLib)詳細 その2 glutil.hpp, glutil.cpp
- 自作OpenGLクラス(DGLLib)詳細 その3 glbasicshape.hpp, glbasicshape.cpp
- 自作OpenGLクラス(DGLLib)詳細 その4 glwindow.hpp, glwindow.cpp
コメント