VC++7.0,MFCダイアログベース
で,OpenGLを扱っています.
OpenGLで描画したVR空間を複数の視点から描画しているのですが,
これらのフレームのバッファを高速に取得したいと考えています.
作成したVR空間は,タイマー関数を利用し,30fpsで再描画されています.
取得画像のサイズは160x120です.
実際glReadPixels()を利用し,フレームのバッファを取得できています.
しかし,2フレーム程度であれば,ほとんど遅れることなくバッファを取得できているのですが,それ以上になると処理の遅れが目立ってしまいます.
例えばGL側の関数でバッファを取得するのではなく,
描画しているVC側のバッファのポインタを直接取得できれば,
速くすることが可能性かなぁとか考えています.
どうすれば高速な取得が実現できそうか,
小さいことでも良いので教えてください.
OpenGLは詳しくないので一般論で。
>複数の視点から描画
視点が変わると0からの再描画になりますから、3回描く場合は1回の場合に比べて処理負荷は単純に3倍になります。高速化などはできません(視線が180度逆を向けば見えるものが全く異なりますから)。
高速化したければ別の部分でする必要があります。ポリゴン数を減らすとか、OpenGLに対応したビデオカードを使うなど。
回答ありがとうございます.
確かに,おっしゃる通りなんですが,
実際,現在の状態で描画に関しては,
ほとんど遅延なく処理を行うことが出来ています.
ただ,画像のバッファを取得するglReadPixels()関数のみが遅い状態です.
なので,glReadPixelsを利用しないで,
画像バッファを高速に取得できる方法があれば...
と思い,質問させていただきました.
VC++側でデバイスコンテキストから直接バッファを取得できないかと思っているのですが...
よろしくお願いいたします.
なるほど、ではここら辺は参考になりませんか?http://groups.yahoo.co.jp/group/opengl-jp/message/2756
結論から言うと無理と言うことみたいですが…
デバイスコンテキストから取得できるのはOpenGLで描画済みのものですから、glReadPixels(というかOpenGL)自体が遅い場合はどうしようもありません。たぶんそこら辺に何か誤解があると思いますが。
何度もありがとうございます.
ちょっとどうしようもなさそうです.
参考になりました.
ツイート | ![]() |