大まかな質問で申し訳ありませんが、私はそれをどのように表現するかがよくわかりませんでした。カメラのピクセルを操作するアプリを作成しています。私は OpenGl が初めてで、テクスチャをシェーダーにリンクする方法、または実際のシェーダー コードのどこかに問題がある可能性があります。
テクスチャに変換し、操作テーブルとして使用するシェーダーに渡す RGB ルックアップ テーブルがあります。テクスチャのサイズと設定は適切だと思いますが、100% 確実ではありません。私のシェーダーにはこれがあります:
uniform sampler2D data_Texture // The RGB look up table texture
uniform samplerExternalOES u_Texture; // The camera's texture
そして、これはシェーダーのメイン ループにあります。
// Color changing Algorithm
vec3 texel = texture2D(u_Texture, v_TexCoordinate).rgb;
gl_FragColor = vec4(texel.x, texel.y, texel.z, 1.0);
float rr = gl_FragColor.r * 255.0;
float gg = gl_FragColor.g * 255.0;
float bb = gl_FragColor.b * 255.0;
int r = int(rr);
int g = int(gg);
int b = int(bb);
int index = ((r/4) * 4096) + ((g/4) * 64) + (b/4);
int x = int(mod(float(index), 512.0));
int y = index / 512;
vec4 data = texture2D(data_Texture, vec2(float(x)/512.0, float(y)/512.0));
カメラの RGB ピクセルを取得して、ルックアップ テーブルのインデックスを取得します。次に、ルックアップ テーブルから RGB データを取得して、カメラのピクセルを置き換えようとします。ここで問題が発生します。上記のコードからわかるように、実際には FragColor をデータで変更していません。これは、テスト中に興味深い出来事が見つかったためです。メインループの最後の行をコメントアウトすると、
//vec4 data = texture2D(data_Texture, vec2(float(x)/512.0, float(y)/512.0));
実際の FragColor を操作していないため、カメラは通常どおりに表示されます。しかし、最後の行を残すと、ピクセルは暗い色の場合は緑に、明るい色の場合はピンク/オレンジに変わります.
FragColor を明示的に変更せずに、このデータ変数を入力すると、カメラのピクセルが変更されるのはなぜですか??