OpenGLで画素値がfloat値をもつ画像を作成したい

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
asdf

OpenGLで画素値がfloat値をもつ画像を作成したい

#1

投稿記事 by asdf » 11年前

OpenGLを用いてレンダリングしたものをglReadPixelによって画像として取得出来ますが、この時に取得する画像の画素値をfloat値にしたいです。例えば、3Dの物体の法線の始点に対応する画面にレンダリングされた画素の値を、3Dの物体の法線から計算できる値(float値)にしてやり、float値をもつ画像(cv::Mat_<float>)を取得したいです(物体がレンダリングされる部分以外の画素値は0)。(わかりづらくてすみません。)

float値のため画面に出力できないので、Frame Buffer Objectによってオフスクリーンレンダリングしてやり、glReadPixelによって画像として取得すれば上記のことが出来るでしょうか?

アバター
海Sea
記事: 102
登録日時: 13年前
住所: 大阪
連絡を取る:

Re: OpenGLで画素値がfloat値をもつ画像を作成したい

#2

投稿記事 by 海Sea » 11年前

asdf さんが書きました: float値のため画面に出力できないので、Frame Buffer Objectによってオフスクリーンレンダリングしてやり、glReadPixelによって画像として取得すれば上記のことが出来るでしょうか?
OpneGLなどには詳しくないので、質問にはお応えできませんが、
とりあえずご自分で仰ってることを試してみてはいかがでしょうか?
質問はその方法で出来るかどうかではなく、
やったけど出来なかったのでどうすればいいかわからない事を、
質問したほうが良いかもしれません。

ISLe
記事: 2650
登録日時: 13年前
連絡を取る:

Re: OpenGLで画素値がfloat値をもつ画像を作成したい

#3

投稿記事 by ISLe » 11年前

glReadPixelsにGL_FLOATを指定すればfloatで取得できるはずですが、お望みのものではないでしょう。

法線から計算できる値を持つ画像を取得したい、というのであれば『UVマップ』で検索してみてください。

レンダリング出力するにはシェーダーを書く必要があると思います。
既存のツールを使ったほうが楽なのでは?

asdf

Re: OpenGLで画素値がfloat値をもつ画像を作成したい

#4

投稿記事 by asdf » 11年前

海Seaさん
仰るとおりですが、今かなり時間に押されていまして、ぼんやりとでもゴールが見えている状態で先に進みたいと思ったため質問しました。ご助言ありがとうございます。

ISLeさん
ありがとうございます。しかし、UVマップは自分がしたいことではありませんでした。書き忘れてしまっていたのですが、GLSLを用いて、レンダリングした部分の画素値をfragmentシェーダによってfloat値にしようと思っています。
何かの画像を作りたいわけではなく、画素値がfloat値の画像を作成し、その画素値を評価関数に入れて計算するということをやろうとしています。

ソラトブペンギン
記事: 3
登録日時: 11年前

Re: OpenGLで画素値がfloat値をもつ画像を作成したい

#5

投稿記事 by ソラトブペンギン » 11年前

正直やったことがないので可能か不可能かよくわかりませんが、突破口になる事を祈って...

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のテクスチャにレンダリングできれば...

ISLe
記事: 2650
登録日時: 13年前
連絡を取る:

Re: OpenGLで画素値がfloat値をもつ画像を作成したい

#6

投稿記事 by ISLe » 11年前

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ということですね。

asdf

Re: OpenGLで画素値がfloat値をもつ画像を作成したい

#7

投稿記事 by asdf » 11年前

ソラトブペンギンさん、ISLeさん、ありがとうございます。
返信が遅くなり申し訳ありません。風邪を引いてしまっていました。

また、より優先順位の高い仕事が降ってきてしまい、こちらに時間を割くのが難しい状況になったため、一旦休止させていただきます。すみません。
教えていただいたことを参考にもう少し勉強してみます。解決策等はまた出来次第追記します。

閉鎖

“C言語何でも質問掲示板” へ戻る