如何在OpenGL中设置依赖的纹理查找

时间:2013-09-30 16:09:54

标签: opengl

我需要设置一个“依赖纹理”,以便使用一个纹理查找的返回值来确定从第二个纹理中查找的位置。

你能指点我正确的gl API调用吗?

2 个答案:

答案 0 :(得分:3)

  

我需要设置一个“依赖纹理”,以便使用一个纹理查找的返回值来确定从第二个纹理中查找的位置。

这只能使用着色器完成。

  

你能指点我正确的gl API调用吗?

你要求API调用:这里它们是:

  • glCreateShader创建新的着色器对象
  • glShaderSource将着色器源代码加载到着色器对象
  • glCompileShader编译已加载的着色器源
  • glCreateProgram创建程序对象
  • glLinkProgram将着色器对象链接到程序
  • glUseProgram实际使用通过上述调用创建的着色器程序
  • glUniform1i将片段着色器采样器制服设置为源于
  • 的纹理单元

另外,你没有要求它们,但你也需要它们,这里是所需的GLSL语言元素:

  • sampler…制服将纹理单位绑定到
  • 用于获取纹理样本的texture GLSL函数。使用采样纹理的值来确定下一个纹理坐标的纹理坐标。

答案 1 :(得分:1)

喜欢这个。

uniform sampler2D coord_texture;
uniform sampler2D sampling_texture;
uniform vec2 InvWinSize;

void main(void){
    vec2 uv = gl_FragCord.st*InvWinSize;

    vec2 tex_coord = texture(coord_texture, uv).st;
    vec4 sampled = texture(sampling_texture,tex_coord);
}

我使用屏幕坐标访问了第一个纹理,但你可以使用你需要的任何uv,例如,uv来自顶点着色器:

uniform sampler2D coord_texture;
uniform sampler2D sampling_texture;

in vec2 uv;

void main(void){

    vec2 tex_coord = texture(coord_texture, uv).st;
    vec4 sampled = texture(sampling_texture,tex_coord);
}