03.ピックOpenGLビュークラスを作る



ピッキング(要素選択)に関する処理を担うピックOpenGLビュークラスを、トラックOpenGLビュークラスの派生クラスとして作成します。

プロジェクトの作成

「メニュー/新規作成/プロジェクト」を選択します。

プロジェクトの種類:MFC
テンプレート:MFC アプリケーション
プロジェクト名:OpenGLPick
場所:適当なフォルダを指定
ソリューションのディレクトリの作成:チェックしない
でOKボタンを押します。

以降、「01.ベースOpenGLビュークラスを作る」におけるプロジェクト作成と同じ設定でプロジェクトを作成します。

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

ベースOpenGLビュークラスファイル、トラックOpenGLビュークラスファイルをプロジェクトに追加

「02.トラックOpenGLビュークラスを作る」で作成した
OpenGLBaseView.cpp
OpenGLBaseView.h
OpenGLTrackView.cpp
OpenGLTrackView.h
をOpenGLPickプロジェクトフォルダにコピーします。

「メニュー/プロジェクト/既存項目の追加」を選択します。
OpenGLBaseView.cpp
OpenGLBaseView.h
OpenGLTrackView.cpp
OpenGLTrackView.h
を追加します。


OpenGLTrackView.cppの
#include "OpenGLTrack.h"
#include "OpenGLTrackDoc.h"
をコメントアウトします。



OpenGLTrackView.cppおよびOpenGLTrackView.hの
COpenGLTrackDocをCDocumentに置換します。(「大文字と小文字を区別する」「単語単位」にチェックを入れます。)

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

ピックOpenGLビュークラスの親クラスの変更

OpenGLPickView.h に
#include "OpenGLTrackView.h"
を追加します。



OpenGLPickView.cpp および OpenGLPickView.h の
CView を COpenGLTrackView に置換します。(「大文字と小文字を区別する」「単語単位」にチェックを入れます。)

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

ピックOpenGLビュークラスのOnDraw関数の削除

ベースOpenGLビュークラスのOnDraw関数が呼ばれるように、ピックOpenGLビュークラスのOnDraw関数を削除します。
プロパティウィンドウで、オーバーライドモードで、OnDrawを探し、「<削除> OnDraw」を実行します。

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

実行し、OpenGLTrackプログラムと同じ結果になることを確認します。

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

OpenGLPickView.h のピックOpenGLビュークラス定義の前に
名前列の大きさの定義
列挙型ERENDERMODEの定義
を追加します。
OpenGLPickView.h のピックOpenGLビュークラス定義の最初にメンバ変数、メンバ関数の宣言を追加します。



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

メンバ変数の初期化

OpenGLPickView.cpp のピックOpenGLビュークラスのコンストラクタにメンバ変数の初期化を追加します。



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

RenderScene関数のオーバーライド

ベースOpenGLビュークラスの描画処理は要素ピックを考慮していません。
ピックOpenGLビュークラスに要素ピックを考慮した描画処理 RenderScene関数 をオーバーライドします。

OpenGLPickView.cpp にRenderScene関数の定義を追加します。さらにRenderScene関数で呼び出されるメンバ関数RenderObjects関数の定義を追加します。



OpenGLBaseView.h のベースOpenGLビュークラスのメンバ関数
RenderScene
をprotected関数、さらにvirtual関数とします。



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

実行し、OpenGLTrackプログラムに対して、表示モデルが下図のモデルになっていることを確認します。

DoPicking関数の追加、編集

OpenGLPickView.cpp に要素選択操作に関するメンバ関数の定義を追加します。



OpenGLTrackView.h のトラックOpenGLビュークラスのメンバ関数
SetupViewingFrustum
をprotected関数とします。



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

マウス操作イベントハンドラの追加、編集

以下のマウス操作メッセージハンドラをピックOpenGLビュークラスに追加します。

ウィンドウメッセージ名 メッセージハンドラ名
WM_RBUTTONUP OnRButtonUp

メッセージハンドラにメンバ関数の呼び出しを追加します。



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

実行

右クリックにより要素をピックできること
点をピックすると、ピックした点の色がピンク色になり点の大きさが少し大きくなること
線をピックすると、ピックした線の色が水色になり線の太さが少し太くなること
面をピックすると、ピックした面の色が黄色になること
を確認します。

実行結果

ダウンロード

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

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