2012-04-02 2 views
1

私はレイ・キャスターをC++で書いています。その結果を通常の画像ファイルに出力します。さて、GLUTが提供するOpenGLウィンドウに内部RGBA表現(4整数)を描画したいと思います。OpenGL TextureへのRGBA整数値

glTexImage2Dを使用してテクスチャを生成し、そのテクスチャをクワッドに割り当ててから、このクワッドをカメラの前でレンダリングする必要があることは既に知っています。

http://www.opengl.org/sdk/docs/man/xhtml/glTexImage2D.xml

私がいる問題は、私は、私はglTexImage2D関数にデータを提示しなければならないのか分からないということです:どのように私は、単純な4から来る、私のデータを含むこのgluByteデータチャンクを構築します-integer RGBA表現ですか?

+0

、私はこれをやってしまった: 'unsigned char型*データ=(データは配列でここに入る);' 'glTexImage2D(GL_TEXTURE_2D、0、GL_RGBA、幅、高さ、0、GL_RGBA、GL_UNSIGNED_BYTE 、data); ' –

答えて

1

あなたのデータをどのように保存するかは、多かれ少なかれあなた次第です。最後の3つのパラメータは、glTexImage2D(および追加のパラメータ)describe how your data is formattedです。データをどのように格納できるかについての制限があります(1ピクセルあたり4バイトの整列を超えてパディングすることは不可能であり、コンポーネントは隣接していなければなりません)。

幅x高さx4サイズの配列として、各コンポーネントの符号なしint:RGBARGBARGBA ...?

これはその方法の1つですが、それだけではありません。レコードの

0

データチャンクは、RGBA表現へのポインタに過ぎません。 glTexImage2D(GL_TEXTURE_2D, 0, 4, width, height, 0, GL_RGBA, GL_UNSIGNED_INT, dataBuffer);に電話してください。テクスチャ内の線は、これが機能するためにはwidth * sizeof(GLuint)バイトでなければなりません。

+0

そして、データを保存するには?幅x高さx 4サイズの配列として、各コンポーネントの符号なしint:RGBARGBARGBA ...? –

+0

正確に。使用しているOpenGLドライバが、符号なしのintを、例えば、次のように変換する可能性があることに注意してください。アップロード前に内部的に符号なしの文字を返します。メモリを節約するために、依然としてuintsをcharsに手動で変換することができます。 – jfortmann