ホーム > プログラミング > モデルビューワを作る > 08.描画の高速化(通常描画とピック描画の処理の分離)

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



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

プロジェクトを開く

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

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

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

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

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

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



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

実行

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

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

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

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


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

ダウンロード

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

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


ご意見、ご感想、ご質問、ご要望等は、「コメントを投稿する」もしくは「ホーム > コンタクト」よりお願いいたします。
内容の誤り、誤字脱字、リンクミスなどの問題点を発見された場合には「コメントを投稿する」もしくは「ホーム > コンタクト」より連絡していただけると幸いです。


Copyright (c) 2005-2016 Nobuki HIRAMINE All rights reserved.