我正在尝试编写简单的着色器在基础纹理(128 * 128)上放置一些“标记”(64 * 64),以指示标记必须在哪里,我在基础上使用青色标记大小(64 * 64)区域质地。
变成
片段着色器
precision lowp float;
uniform sampler2D us_base_tex;
uniform sampler2D us_mark_tex;
varying vec2 vv_base_tex;
varying vec2 vv_mark_tex;
const vec4 c_mark_col = vec4(0.0, 1.0, 1.0, 1.0);//CYAN
void main()
{
vec4 base_col = texture2D(us_base_tex, vv_base_tex);
if(base_col == c_mark_col)
{
vec4 mark_col = texture2D(us_mark_tex, vv_mark_tex);//texelFetch magic overhere must be
base_col = mix(base_col, mark_col, mark_col.a);
}
gl_FragColor = base_col;
}
当然,它不能正常工作,我得到了这样的东西(透明仅用于演示,没有青色区域,只有一块“T”):
我试图弄清楚它,只有像 texelFetch 这样的东西会帮助我,但我不知道,如何获取基础纹理青色纹素的 tex 坐标并将其转换为 - 第一个 col/第一行 青色 base texel = first col/first行标记纹素,第二列/第一行基数 = 第二列/第一行标记。ETC