GL_LUMINANCE形式を使用してグレースケール画像でテクスチャをロードします。
float NP = texture2D(input1, textureCoordinate).r;
フラグメントシェーダーで使用すると、プログラムが失敗します。
ピクセルのグレースケール値を読み取ることは可能ですか、それとも4チャンネルのみでの作業に制限されていますか?
もちろん。これは、「高さマップ」をロードする 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;
魅力のように機能します。