08.描画の高速化(通常描画とピック描画の処理の分離)



05.で作成したモデルビューワの描画処理は、通常描画とピック描画を同一の処理で行っていました。
通常描画とピック描画とで処理を分けることにより通常描画の高速化を行います。

プロジェクトを開く

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

通常描画とピック描画とで処理を分ける

05.で作成したモデルビューワの描画処理は、通常描画とピック描画を同一の処理で行なっていました。
通常描画とピック描画とで処理を分けることにより通常描画の高速化を行います。

①glPushName関数、glPopName関数
ピック描画の描画処理には、glPushName関数、 glPopName関数という描画に名前を付ける処理が必要ですが、これは通常描画の描画処理には必要ありません。
②glBegin関数、glEnd関数
ピック描画の描画処理は、ピックできるようにする要素の描画ごとに、glBegin()、glEnd()を呼び出して要素の描画ごとに異なる名前を付ける必要がありますが、通常描画の描画処理は、複数の要素の描画をまとめて、glBegin関数、glEnd関数を呼び出すことができます。そして一般的に、glBegin関数、glEnd関数の回数は少ない方が短時間で処理が行なわれます。
③ピック要素(ピックされている要素)の描画
ピック描画の描画処理には、ピック要素の描画処理は必要ありません。

①、②、③を元に、RenderObjects関数 を通常描画とピック描画とで別々の処理が行なわれるように変更します。

ModelViewerView.cpp の CModelViewerView::RenderObjects関数 の内容を以下のようにします。



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

実行

実行し、07.で作成したモデルビューワと、描画速度を比較します。

描画速度はステータスバーに表示されます。

fps
frame per second : 1秒間に描画できる回数を表します。数値が大きいほど、描画速度は速いことになります。
spf
second per frame : 1回の描画に要する時間を表します。数値が小さいほど、描画速度は速いことになります。

07.で作成したモデルビューワの描画速度:63[fps]前後(数値はPCの性能に依存します)


08.で作成したモデルビューワの描画速度:67[fps]前後(数値はPCの性能に依存します)

ダウンロード

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

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