对于这个广泛的问题感到抱歉,但我不知道如何说出来。我正在创建一个操纵相机像素的应用程序。我是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,会更改相机的像素?