04.モデルビューワレンダラクラスを作る



描画要素(点、線、面)のON/OFF
マウス操作(回転、平行移動、拡大縮小)のON/OFF
ピック要素(点、線、面)のON/OFF

上記機能を有するモデルビューワレンダラクラスを、ピックOpenGLレンダラクラスの派生クラスとして作成します。

解説

ワイヤーフレーム表示にしたり、サーフェース表示にしたりできるように、描画要素(点、線、面)のON/OFFの設定に応じて描画処理を行います。

ピックする要素として、点のみピックできるようにしたり、面のみピックできるようにしたりできるように、ピック要素(点、線、面)のON/OFFの設定に応じてピック処理を行います。

ローテートできないようにしたり、パンできないようにしたり、ズームできないようにしたりできるように、トラッキングモード(ローテート、パン、ズーム)のON/OFFの設定に応じて、トラック処理を行います。

プロジェクトを開く

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

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

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

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

クラス名:CModelViewerRenderer
基底クラス:COpenGLRendererPick
で完了ボタンを押します。

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

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

ModelViewerRenderer.h のモデルビューワレンダラクラス定義にメンバ変数、メンバ関数の宣言を追加します。



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

メンバ変数の初期化

ModelViewerRenderer.cpp のモデルビューワレンダラクラスのコンストラクタにメンバ変数の初期化を追加します。



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

DoTracking関数のオーバーライド

モデルビューワのレンダラクラスにマウス操作のON/OFFに対応したトラッキング処理 DoTracking関数 をオーバーライドします。

ModelViewerRenderer.cpp の末尾にDoTracking()の定義を追加します。



OpenGLRendererTrack.h のトラックOpenGLレンダラクラスのメンバ変数
m_eTrackingMode
をprotected変数とします。
メンバ関数
DoTracking
をvirtual関数とします。



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

RenderModel関数のオーバーロード

モデルビューワのレンダラクラスに描画要素のON/OFFに対応した要素描画処理 RenderModel関数 をオーバーライドします。

ModelViewerRenderer.cpp の末尾にRenderModel関数の定義を追加します。



OpenGLRendererPick.h のピックOpenGLレンダラクラスのメンバ変数
m_auiName_pick
をprotected変数とします。
メンバ関数
RenderModel
をprotected関数、さらにvirtual関数とします。



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

IdentifyPickRegionPixels関数のオーバーロード

モデルビューワのレンダラクラスにピック要素のON/OFFに対応したピック要素特定処理 IdentifyPickRegionPixels関数 をオーバーライドします。

ModelViewerRenderer.cpp の末尾にIdentifyPickRegionPixels関数の定義を追加します。



OpenGLRendererPick.h のピックOpenGLレンダラクラスのメンバ関数
IdentifyPickRegionPixels
をprotected関数、さらにvirtual関数とします。



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

レンダラオブジェクトのクラスの変更

ModelViewer.cpp の
#include "OpenGLRendererPick.h"

#include "ModelViewerRenderer.h"
に、
COpenGLRendererPick glrenderer;

CModelViewerRenderer glrenderer;
に変更します。



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

メニューアイテムの追加

メニュー/表示 に以下のメニューアイテムを追加します。
(メニューへのアイテムの追加、編集は、「リソースビュー」を使用します)

メニュー名 メニューID
マウス操作
回転 ID_VIEW_ROTATION
平行移動 ID_VIEW_PAN
拡大縮小 ID_VIEW_ZOOM
描画
ID_VIEW_RENDERPOINT
ID_VIEW_RENDERLINE
ID_VIEW_RENDERFACE
ピック
ID_VIEW_PICKPOINT
ID_VIEW_PICKLINE
ID_VIEW_PICKFACE

メニューアイテム追加画面例


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

メニューアイテムの応答関数の追加、編集

ModelViewer.cpp の WndProc関数に、以下のメニュー操作ウィンドウメッセージ処理を追加します。

メニューコマンドID
ID_VIEW_ROTATION
ID_VIEW_PAN
ID_VIEW_ZOOM
ID_VIEW_RENDERPOINT
ID_VIEW_RENDERLINE
ID_VIEW_RENDERFACE
ID_VIEW_PICKPOINT
ID_VIEW_PICKLINE
ID_VIEW_PICKFACE

メニューハンドラ変数の宣言を追加をします。
WM_CREATEウィンドウメッセージ処理を追加し、メニュー初期化処理を追加します。
WM_COMMANDウィンドウメッセージ処理に、メニューハンドラの取得処理およびメニュー操作ウィンドウズメッセージ処理を追加します。



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

実行

メニューから
描画要素(点、線、面)のON/OFF
マウス操作(回転、平行移動、拡大縮小)のON/OFF
ピック要素(点、線、面)のON/OFF
を変更することが可能となっていること、
メニューの変更が画面、操作に反映されていることを確認します。

実行結果

ダウンロード

ソースファイルダウンロード ( ModelViewerOpenGLWinAPI2015_04_app.zip )

関連ページ

前項目:03.ピックOpenGLレンダラクラスを作る

次項目:05.モデルデータ構造を作る