OpenGLを用いてレンダリングしたものをglReadPixelによって画像として取得出来ますが、この時に取得する画像の画素値をfloat値にしたいです。例えば、3Dの物体の法線の始点に対応する画面にレンダリングされた画素の値を、3Dの物体の法線から計算できる値(float値)にしてやり、float値をもつ画像(cv::Mat_<float>)を取得したいです(物体がレンダリングされる部分以外の画素値は0)。(わかりづらくてすみません。)
float値のため画面に出力できないので、Frame Buffer Objectによってオフスクリーンレンダリングしてやり、glReadPixelによって画像として取得すれば上記のことが出来るでしょうか?
OpenGLで画素値がfloat値をもつ画像を作成したい
Re: OpenGLで画素値がfloat値をもつ画像を作成したい
OpneGLなどには詳しくないので、質問にはお応えできませんが、asdf さんが書きました: float値のため画面に出力できないので、Frame Buffer Objectによってオフスクリーンレンダリングしてやり、glReadPixelによって画像として取得すれば上記のことが出来るでしょうか?
とりあえずご自分で仰ってることを試してみてはいかがでしょうか?
質問はその方法で出来るかどうかではなく、
やったけど出来なかったのでどうすればいいかわからない事を、
質問したほうが良いかもしれません。
Re: OpenGLで画素値がfloat値をもつ画像を作成したい
glReadPixelsにGL_FLOATを指定すればfloatで取得できるはずですが、お望みのものではないでしょう。
法線から計算できる値を持つ画像を取得したい、というのであれば『UVマップ』で検索してみてください。
レンダリング出力するにはシェーダーを書く必要があると思います。
既存のツールを使ったほうが楽なのでは?
法線から計算できる値を持つ画像を取得したい、というのであれば『UVマップ』で検索してみてください。
レンダリング出力するにはシェーダーを書く必要があると思います。
既存のツールを使ったほうが楽なのでは?
Re: OpenGLで画素値がfloat値をもつ画像を作成したい
海Seaさん
仰るとおりですが、今かなり時間に押されていまして、ぼんやりとでもゴールが見えている状態で先に進みたいと思ったため質問しました。ご助言ありがとうございます。
ISLeさん
ありがとうございます。しかし、UVマップは自分がしたいことではありませんでした。書き忘れてしまっていたのですが、GLSLを用いて、レンダリングした部分の画素値をfragmentシェーダによってfloat値にしようと思っています。
何かの画像を作りたいわけではなく、画素値がfloat値の画像を作成し、その画素値を評価関数に入れて計算するということをやろうとしています。
仰るとおりですが、今かなり時間に押されていまして、ぼんやりとでもゴールが見えている状態で先に進みたいと思ったため質問しました。ご助言ありがとうございます。
ISLeさん
ありがとうございます。しかし、UVマップは自分がしたいことではありませんでした。書き忘れてしまっていたのですが、GLSLを用いて、レンダリングした部分の画素値をfragmentシェーダによってfloat値にしようと思っています。
何かの画像を作りたいわけではなく、画素値がfloat値の画像を作成し、その画素値を評価関数に入れて計算するということをやろうとしています。
Re: OpenGLで画素値がfloat値をもつ画像を作成したい
正直やったことがないので可能か不可能かよくわかりませんが、突破口になる事を祈って...
OpenGLを触っていたのが相当昔で近頃のトレンドに疎いので正確な情報かどうか自信があまりありませんが、OpenGLの仕様上はテクスチャのピクセルフォーマットに浮動小数点を指定することが出来るようです。
例えば、glTexImage2D()。
http://www.opengl.org/sdk/docs/man/xhtm ... mage2D.xml
引数のinternalFormatにGL_RGBAではなくGL_RGBA32Fを指定すれば、1画素がfloat × 4になります。
GL_R32Fなら1画素がfloat × 1になります。
何らかの形でピクセルフォーマットをfloat型にしたテクスチャかフレームバッファにレンダリングする、というのが求めている回答ではないかと。
フレームバッファのピクセルフォーマットは変更できるはずですが、floatには多分できない気がします。
となれば、floatのテクスチャにレンダリングできれば...
OpenGLを触っていたのが相当昔で近頃のトレンドに疎いので正確な情報かどうか自信があまりありませんが、OpenGLの仕様上はテクスチャのピクセルフォーマットに浮動小数点を指定することが出来るようです。
例えば、glTexImage2D()。
http://www.opengl.org/sdk/docs/man/xhtm ... mage2D.xml
引数のinternalFormatにGL_RGBAではなくGL_RGBA32Fを指定すれば、1画素がfloat × 4になります。
GL_R32Fなら1画素がfloat × 1になります。
何らかの形でピクセルフォーマットをfloat型にしたテクスチャかフレームバッファにレンダリングする、というのが求めている回答ではないかと。
フレームバッファのピクセルフォーマットは変更できるはずですが、floatには多分できない気がします。
となれば、floatのテクスチャにレンダリングできれば...
Re: OpenGLで画素値がfloat値をもつ画像を作成したい
UVマップ画像を使って処理するほうでなくて、UVマップ画像を生成するのと同じ手法が使えると思うのですけどね。
質問文にある「3Dの物体の法線から計算できる値(float値)」の詳細が分からないので具体的な回答ができないです。
正規化した法線(x,y,z)のfloat×3なのか、何か計算で求めたfloat×1なのか、とか。
法線を画素に落とす方法は
http://www.arakin.dyndns.org/glsl_simple.php
が参考になるのではないでしょうか。
もともとシェーダ内では浮動小数点数ですし。
オフスクリーンレンダリングは既にご存知なのでは。
(追記)
cv::Mat_<float>ということは、1画素はfloat×1ということですね。
質問文にある「3Dの物体の法線から計算できる値(float値)」の詳細が分からないので具体的な回答ができないです。
正規化した法線(x,y,z)のfloat×3なのか、何か計算で求めたfloat×1なのか、とか。
法線を画素に落とす方法は
http://www.arakin.dyndns.org/glsl_simple.php
が参考になるのではないでしょうか。
もともとシェーダ内では浮動小数点数ですし。
オフスクリーンレンダリングは既にご存知なのでは。
(追記)
cv::Mat_<float>ということは、1画素はfloat×1ということですね。
Re: OpenGLで画素値がfloat値をもつ画像を作成したい
ソラトブペンギンさん、ISLeさん、ありがとうございます。
返信が遅くなり申し訳ありません。風邪を引いてしまっていました。
また、より優先順位の高い仕事が降ってきてしまい、こちらに時間を割くのが難しい状況になったため、一旦休止させていただきます。すみません。
教えていただいたことを参考にもう少し勉強してみます。解決策等はまた出来次第追記します。
返信が遅くなり申し訳ありません。風邪を引いてしまっていました。
また、より優先順位の高い仕事が降ってきてしまい、こちらに時間を割くのが難しい状況になったため、一旦休止させていただきます。すみません。
教えていただいたことを参考にもう少し勉強してみます。解決策等はまた出来次第追記します。