02.トラックDirect3Dレンダラクラスを作る
トラッキング(マウス操作による描画領域の回転、拡大縮小、平行移動)に関する処理を担うトラックDirect3Dレンダラクラスを、ベースDirect3Dレンダラクラスの派生クラスとして作成します。
プロジェクトを開く
01.で作成したモデルビューワプロジェクトを開きます。
トラックDirect3Dレンダラクラスの作成
「メニュー/プロジェクト/クラスの追加」でクラス名「CDirect3DRendererTrack」のクラスを作成します。
テンプレート:C++ クラス
で追加ボタンを押します。
クラス名:CDirect3DRendererTrack
基本クラス:CDirect3DRendererBase
で完了ボタンを押します。
ビルドし、エラー、警告がないことを確認します。
メンバ変数、メンバ関数の宣言の追加
Direct3DRendererTrack.h のトラックDirect3Dレンダラクラス定義の前に
列挙型ETRACKINGMODEの定義
を追加します。
Direct3DRendererTrack.h のトラックDirect3Dレンダラクラス定義にメンバ変数、メンバ関数の宣言を追加します。
ビルドし、エラー、警告がないことを確認します。
メンバ変数の初期化
Direct3DRendererTrack.cpp のトラックDirect3Dレンダラクラスのコンストラクタにメンバ変数の初期化を追加します。
ビルドし、エラー、警告がないことを確認します。
BeginTracking関数の追加、編集
Direct3DRendererTrack.cpp の末尾にマウス操作の開始処理に関するメンバ関数の定義を追加します。
Direct3DRendererTrack.cpp の先頭に
math.h のインクルードと
M_PI の定義
を追加します。
Direct3DRendererBase.h のベースDirect3Dレンダラクラスのメンバ変数
m_cx
m_cy
をprotected変数とします。
ビルドし、エラー、警告がないことを確認します。
EndTracking関数の追加、編集
Direct3DRendererTrack.cpp の末尾にマウス操作の終了処理に関するメンバ関数の定義を追加します。
ビルドし、エラー、警告がないことを確認します。
DoTracking関数の追加、編集
Direct3DRendererTrack.cpp の末尾にマウス操作のマウス移動中の処理に関するメンバ関数の定義を追加します。
Direct3DRendererBase.h のベースDirect3Dレンダラクラスの
メンバ変数
m_pD3DDevice
をprotected変数とします。
メンバ関数
SetupViewingFrustum
SetupViewingTransform
SetupModelingTransform
をprotected関数、さらにvirtual関数とします。
ビルドし、エラー、警告がないことを確認します。
レンダラオブジェクトのクラスの変更
ModelViewer.cpp の
#include "Direct3DRendererBase.h"
を
#include "Direct3DRendererTrack.h"
に、
CDirect3DRendererBase d3drenderer;
を
CDirect3DRendererTrack d3drenderer;
に変更します。
ビルドし、エラー、警告がないことを確認します。
マウス操作イベントハンドラの追加、編集
ModelViewer.cpp の WndProc関数に、以下のマウス操作ウィンドウメッセージ処理を追加します。
ウィンドウメッセージ名 |
---|
WM_LBUTTONDOWN |
WM_LBUTTONUP |
WM_MBUTTONDOWN |
WM_MBUTTONUP |
WM_MOUSEMOVE |
WM_MOUSEWHEEL |
それぞれのウィンドウズメッセージにレンダラメンバ関数の呼び出しを追加します。
ビルドし、エラー、警告がないことを確認します。
実行
マウス左ボタンドラックで描画空間が回転すること
マウス中ボタンドラッグで描画空間が平行移動すること
マウスホイールで描画空間が拡大縮小すること
を確認します。
実行結果
ダウンロード
実行形式ファイルダウンロード (ModelViewerDirect3DWinAPI2008_02_exe.lzh)
ソースファイルダウンロード (ModelViewerDirect3DWinAPI2008_02_src.lzh)