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.モデルデータ構造を作る

