02.トラックOpenGLレンダラクラスを作る



トラッキング(マウス操作による描画領域の回転、拡大縮小、平行移動)に関する処理を担うトラックOpenGLレンダラクラスを、ベースOpenGLレンダラクラスの派生クラスとして作成します。

プロジェクトを開く

01.で作成したモデルビューワプロジェクトを開きます。

トラックOpenGLレンダラクラスの作成

「メニュー/プロジェクト/クラスの追加」でクラス名「COpenGLRendererTrack」のクラスを作成します。


テンプレート:C++ クラス
で追加ボタンを押します。


クラス名:COpenGLRendererTrack
基本クラス:COpenGLRendererBase
で完了ボタンを押します。

ビルドし、エラー、警告がないことを確認します。

メンバ変数、メンバ関数の宣言の追加

OpenGLRendererTrack.h のトラックOpenGLレンダラクラス定義の前に
列挙型ETRACKINGMODEの定義
を追加します。
OpenGLRendererTrack.h のトラックOpenGLレンダラクラス定義にメンバ変数、メンバ関数の宣言を追加します。



ビルドし、エラー、警告がないことを確認します。

メンバ変数の初期化

OpenGLRendererTrack.cpp のトラックOpenGLレンダラクラスのコンストラクタにメンバ変数の初期化を追加します。



ビルドし、エラー、警告がないことを確認します。

BeginTracking関数の追加、編集

OpenGLRendererTrack.cpp の末尾にマウス操作の開始処理に関するメンバ関数の定義を追加します。



OpenGLRendererTrack.cpp の先頭に
math.h のインクルードと
M_PI の定義
を追加します。



OpenGLRendererBase.h のベースOpenGLレンダラクラスのメンバ変数
m_cx
m_cy
をprotected変数とします。



ビルドし、エラー、警告がないことを確認します。

EndTracking関数の追加、編集

OpenGLRendererTrack.cpp の末尾にマウス操作の終了処理に関するメンバ関数の定義を追加します。



ビルドし、エラー、警告がないことを確認します。

DoTracking関数の追加、編集

OpenGLRendererTrack.cpp の末尾にマウス操作のマウス移動中の処理に関するメンバ関数の定義を追加します。



OpenGLRendererBase.h のベースOpenGLレンダラクラスのメンバ関数
SetupViewingFrustum
SetupViewingTransform
を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

それぞれのウィンドウズメッセージにレンダラメンバ関数の呼び出しを追加します。



ビルドし、エラー、警告がないことを確認します。

実行

マウス左ボタンドラックで描画空間が回転すること
マウス中ボタンドラッグで描画空間が平行移動すること
マウスホイールで描画空間が拡大縮小すること
を確認します。

実行結果

ダウンロード

実行形式ファイルダウンロード (ModelViewerOpenGLWinAPI2008_02_exe.lzh)

ソースファイルダウンロード (ModelViewerOpenGLWinAPI2008_02_src.lzh)