02.トラックOpenGLレンダラクラスを作る
トラッキング(マウス操作による描画領域の回転、拡大縮小、平行移動)に関する処理を担うトラックOpenGLレンダラクラスを、ベースOpenGLレンダラクラスの派生クラスとして作成します。
解説
トラッキング(マウス操作による描画領域の回転、拡大縮小、平行移動)をするためにすべきことは、以下です。
- マウスのドラッグ量に応じて、描画空間を、回転、拡大縮小、平行移動するようにOpenGLの行列計算をする関数を作成する。また、トラッキングの開始、終了に関する関数も作成する。
- マウス操作メッセージ処理を追加し、トラッキングに関する関数を呼び出す。
プロジェクトを開く
01.で作成したモデルビューワプロジェクトを開きます。
トラックOpenGLレンダラクラスの作成
「メニュー/プロジェクト/クラスの追加」でクラス名「COpenGLRendererTrack」のクラスを作成します。
テンプレート:C++ クラス
で追加ボタンを押します。
クラス名:COpenGLRendererTrack
基底クラス:COpenGLRendererBase
で完了ボタンを押します。
ビルドし、エラー、警告がないことを確認します。
メンバ変数、メンバ関数の宣言の追加
OpenGLRendererTrack.h のトラックOpenGLレンダラクラス定義の前に
列挙型ETRACKINGMODEの定義
を追加します。
OpenGLRendererTrack.h のトラックOpenGLレンダラクラス定義に
メンバ変数、メンバ関数の宣言
を追加します。
ビルドし、エラー、警告がないことを確認します。
メンバ変数の初期化
OpenGLRendererTrack.cpp のトラックOpenGLレンダラクラスのコンストラクタにメンバ変数の初期化を追加します。
ビルドし、エラー、警告がないことを確認します。
BeginTracking関数の追加、編集
OpenGLRendererTrack.cpp の末尾にマウス操作の開始処理に関するメンバ関数の定義を追加します。
ビルドし、エラー、警告がないことを確認します。
EndTracking関数の追加、編集
OpenGLRendererTrack.cpp の末尾にマウス操作の終了処理に関するメンバ関数の定義を追加します。
ビルドし、エラー、警告がないことを確認します。
DoTracking関数の追加、編集
OpenGLRendererTrack.cpp の末尾にマウス操作のマウス移動中の処理に関するメンバ関数の定義を追加します。
OpenGLRendererBase.h のベースOpenGLレンダラクラスのメンバ変数
m_cx
m_cy
をprotected変数とします。
OpenGLRendererBase.h のベースOpenGLレンダラクラスのメンバ関数
SetupProjectionMatrix
SetupModelViewMatrix
をprotected関数、さらにvirtual関数とします。
ビルドし、エラー、警告がないことを確認します。
レンダラオブジェクトのクラスの変更
ModelViewer.cpp の
#include "OpenGLRendererBase.h"
を
#include "OpenGLRendererTrack.h"
に、
COpenGLRendererBase glrenderer;
を
COpenGLRendererTrack glrenderer;
に変更します。
ビルドし、エラー、警告がないことを確認します。
マウス操作イベントハンドラの追加、編集
ModelViewer.cpp の WndProc関数に、以下のマウス操作ウィンドウメッセージ処理を追加します。
ウィンドウメッセージ名 |
---|
WM_LBUTTONDOWN |
WM_LBUTTONUP |
WM_MBUTTONDOWN |
WM_MBUTTONUP |
WM_MOUSEMOVE |
WM_MOUSEWHEEL |
それぞれのウィンドウズメッセージにレンダラメンバ関数の呼び出しを追加します。
ビルドし、エラー、警告がないことを確認します。
実行
マウス左ボタンドラックで描画空間が回転すること
マウス中ボタンドラッグで描画空間が平行移動すること
マウスホイールで描画空間が拡大縮小すること
を確認します。
実行結果
ダウンロード
ソースファイルダウンロード ( ModelViewerOpenGLWinAPI2015_02_track.zip )
関連ページ
前項目:01.ベースOpenGLレンダラクラスを作る
次項目:03.ピックOpenGLレンダラクラスを作る