2

大まかな質問で申し訳ありませんが、私はそれをどのように表現するかがよくわかりませんでした。カメラのピクセルを操作するアプリを作成しています。私は 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 を明示的に変更せずに、このデータ変数を入力すると、カメラのピクセルが変更されるのはなぜですか??

4

0 に答える 0