02.トラックOpenGLビュークラスを作る
トラッキング(マウス操作による描画領域の回転、拡大縮小、平行移動)に関する処理を担うトラックOpenGLビュークラスを、ベースOpenGLビュークラスの派生クラスとして作成します。
プロジェクトの作成
「メニュー/新規作成/プロジェクト」を選択します。
プロジェクトの種類:MFC
テンプレート:MFC アプリケーション
プロジェクト名:OpenGLTrack
場所:適当なフォルダを指定
ソリューションのディレクトリの作成:チェックしない
でOKボタンを押します。
以降、「01.ベースOpenGLビュークラスを作る」におけるプロジェクト作成と同じ設定でプロジェクトを作成します。
ビルドし、エラー、警告がないことを確認します。
ベースOpenGLビュークラスファイルをプロジェクトに追加
「01.ベースOpenGLビュークラスを作る」で作成した
OpenGLBaseView.cpp
OpenGLBaseView.h
をOpenGLTrackプロジェクトフォルダにコピーします。
「メニュー/プロジェクト/既存項目の追加」を選択します。
プロジェクトに
OpenGLBaseView.cpp
OpenGLBaseView.h
を追加します。
OpenGLBaseView.cppの
#include "OpenGLBase.h"
#include "OpenGLDoc.h"
をコメントアウトします。
OpenGLBaseView.cppおよびOpenGLBaseView.hの
COpenGLBaseDocをCDocumentに置換します。(「大文字と小文字を区別する」「単語単位」にチェックを入れます。)
ビルドし、エラー、警告がないことを確認します。
トラックOpenGLビュークラスの親クラスの変更
OpenGLTrackView.h に
#include "OpenGLBaseView.h"
を追加します。
OpenGLTrackView.cpp および OpenGLTrackView.h の
CView を COpenGLBaseView に置換します。(「大文字と小文字を区別する」「単語単位」にチェックを入れます。)
ビルドし、エラー、警告がないことを確認します。
トラックOpenGLビュークラスのOnDraw関数の削除
ベースOpenGLビュークラスのOnDraw関数が呼ばれるように、トラックOpenGLビュークラスのOnDraw関数を削除します。
プロパティウィンドウで、オーバーライドモードで、OnDrawを探し、「<削除> OnDraw」を実行します。
上記オペレーションにより、OnDrawがコメントアウトされます。
ビルドし、エラー、警告がないことを確認します。
実行し、OpenGLBaseプログラムと同じ結果になることを確認します。
メンバ変数、メンバ関数の宣言の追加
OpenGLTrackView.h のトラックOpenGLビュークラス定義の前に
列挙型ETRACKINGMODEの定義
を追加します。
OpenGLTrackView.h のトラックOpenGLビュークラス定義の最初にメンバ変数、メンバ関数の宣言を追加します。
ビルドし、エラー、警告がないことを確認します。
メンバ変数の初期化
OpenGLTrackView.cpp のトラックOpenGLビュークラスのコンストラクタにメンバ変数の初期化を追加します。
ビルドし、エラー、警告がないことを確認します。
BeginTracking関数の追加、編集
OpenGLTrackView.cpp にマウス操作の開始処理に関するメンバ関数の定義を追加します。
OpenGLTrackView.cpp に
math.h のインクルードと
M_PI の定義
を追加します。
OpenGLBaseView.h のベースOpenGLビューのメンバ変数
m_cx
m_cy
をprotected変数とします。
ビルドし、エラー、警告がないことを確認します。
EndTracking関数の追加、編集
OpenGLTrackView.cpp にマウス操作の終了処理に関するメンバ関数の定義を追加します。
ビルドし、エラー、警告がないことを確認します。
DoTracking関数の追加、編集
OpenGLTrackView.cpp にマウス操作のマウス移動中の処理に関するメンバ関数の定義を追加します。
OpenGLBaseView.h のベースOpenGLビュークラスのメンバ関数
SetupViewingFrustum
SetupViewingTransform
をprotected関数、さらにvirtual関数とします。
ビルドし、エラー、警告がないことを確認します。
マウス操作イベントハンドラの追加、編集
以下のマウス操作メッセージハンドラをトラックOpenGLビュークラスに追加します。
ウィンドウメッセージ名 | メッセージハンドラ名 |
---|---|
WM_LBUTTONDOWN | OnLButtonDown |
WM_LBUTTONUP | OnLButtonUp |
WM_MBUTTONDOWN | OnMButtonDown |
WM_MBUTTONUP | OnMButtonUp |
WM_MOUSEMOVE | OnMouseMove |
WM_MOUSEWHEEL | OnMouseWheel |
それぞれのメッセージハンドラにメンバ関数の呼び出しを追加します。
ビルドし、エラー、警告がないことを確認します。
実行
マウス左ボタンドラックで描画空間が回転すること
マウス中ボタンドラッグで描画空間が平行移動すること
マウスホイールで描画空間が拡大縮小すること
を確認します。
実行結果
ダウンロード
実行形式ファイルダウンロード (ModelViewerOpenGLMFC2005_02_exe.lzh)
ソースファイルダウンロード (ModelViewerOpenGLMFC2005_02_src.lzh)