asaのブログ

プログラミングの勉強まとめ

OpenGL マウスでお絵描き

 はい。マウスでお絵描きシリーズは実はこれで三つ目です。Swing版、JOGL版は下のリンクを参考にしてください。

 

 Swingでお絵描き ⇒ デザインパターンまとめ2(お絵かきソフト) - asaのブログ

 JOGLでお絵描き ⇒ JOGL‐マウスでお絵描き - asaのブログ

 

 こんな感じのができます。

 

f:id:asa_r:20170619081025p:plain

 

 環境

 Windows7SP1

 Visual C++ 2017

 freeglut 2.8.1

 

 構成

 4つのファイルで構成しました。

  1.  SetOpenGL.h・・・インクルードファイルをまとめておくヘッダ
  2.  Utilities.h・・・画面の大きさや、関数群をまとめておくヘッダ
  3.  Utilities.cpp・・・関数の定義をするcppファイル
  4.  main.cpp・・・実行用のcppファイル

 

 main.cpp

 まずはOpenGLの基礎をおさらいするために分かりやすいmain.cppから。

gist16546563fda5f76a0beaf058768fa0d3

 なにはともあれglutを初期化します。次にウィンドウのサイズと描画モードを設定して、コールバック関数を指定してやります。最後にループの設定をしたら完成です。

 

 SetOpneGL.h

 インクルードなどをまとめおくためのヘッダです。glutしか入っていませんが今後拡張するならと思って分離しました。

gist583a73fb7e37570ce0be7ba1cc3b4d2f

 

 Utilities.h &Utilities.cpp

 必要な変数や関数をヘッダファイルで宣言してcppで定義しています。ストロークは円で描画しています。ただしOpenGLには円を描画する機能がないので、マウスがドラッグされた位置を基に描画領域を計算して円の半径以内であれば点を打つことで円を実装しました。

 

 座標を保管するようなクラスを設計することも考えましたが、とりあえず動けばいいと思って配列を使って座標を保存し、これを書き直すことでドラッグの軌跡で絵を描くことができます。

gistddabeba1646a5113bf1d8e305b481fbe

gistc6681f69eaf44f8454145ced4b5af3f4