0

GL_LUMINANCE形式を使用してグレースケール画像でテクスチャをロードします。

float NP = texture2D(input1, textureCoordinate).r;フラグメントシェーダーで使用すると、プログラムが失敗します。

ピクセルのグレースケール値を読み取ることは可能ですか、それとも4チャンネルのみでの作業に制限されていますか?

4

1 に答える 1

0

もちろん。これは、「高さマップ」をロードする GL コードです (グレー レベルは として保存されますfloat)。テクスチャはユニット 0 に格納されます。

glActiveTexture(GL_TEXTURE0);
glBindTexture(GL_TEXTURE_2D, textureNames[0]);
...
glTexImage2D(GL_TEXTURE_2D, 0, GL_LUMINANCE,
             heightMap.W, heightMap.H, 0,
             GL_LUMINANCE, GL_FLOAT, &heightMap.elev[0]);

これが私の頂点シェーダーからの適切なコードです。制服HeightMapは0(ユニット0)。

 float z = texture2D(HeightMap, TexCoord0).x * ElevScale + ElevShift;

魅力のように機能します。

于 2012-06-28T16:18:07.640 に答える