Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/219.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 通行证;统一采样器2D“;到libgdx中的glsl着色器(使用modelBatch)_Android_Opengl Es_Shader_Libgdx_Glsles - Fatal编程技术网

Android 通行证;统一采样器2D“;到libgdx中的glsl着色器(使用modelBatch)

Android 通行证;统一采样器2D“;到libgdx中的glsl着色器(使用modelBatch),android,opengl-es,shader,libgdx,glsles,Android,Opengl Es,Shader,Libgdx,Glsles,我在从代码向着色器传递采样时遇到问题。我的着色器中有以下行: uniform sampler2D u_texture; 在代码中,我使用在blender中创建的g3db模型(带有纹理): 我使用modelBatch呈现此内容: modelBatch.begin(cam); modelBatch.render(earthPlanet, shader); modelBatch.end(); 我的代码中有着色器类,其中有一个渲染方法: public void render(Ren

我在从代码向着色器传递采样时遇到问题。我的着色器中有以下行:

uniform sampler2D u_texture;
在代码中,我使用在blender中创建的g3db模型(带有纹理):

我使用modelBatch呈现此内容:

 modelBatch.begin(cam);
    modelBatch.render(earthPlanet, shader);
    modelBatch.end();
我的代码中有着色器类,其中有一个渲染方法:

public void render(Renderable renderable) {
    program.setUniformMatrix(u_worldTrans, renderable.worldTransform);
        //how to pass texture??
    //program.setUniformf(sampler2D, ????);
    renderable.mesh.render(program,
            renderable.primitiveType,
            renderable.meshPartOffset,
            renderable.meshPartSize);
}

我很乐意得到任何回应。谢谢

您的困惑源于这样一个事实,即您认为您将纹理传递给了采样器制服。事实并非如此

当您为采样器均匀性指定值时,您应该提供的值是纹理单位。假设您有一个纹理并将其绑定到
GL\u TEXTURE0
,那么您将为采样器提供统一的值:
0
。顺便说一下,通常您将采样器视为整数统一,因此正确的代码可能是:
program.setUniformi(sampler2D,0)


这告诉GLSL采样器将使用纹理单元0,实际使用的纹理将取决于绑定到该纹理单元的内容。

您的困惑源于您认为将纹理传递给采样器的事实。事实并非如此

当您为采样器均匀性指定值时,您应该提供的值是纹理单位。假设您有一个纹理并将其绑定到
GL\u TEXTURE0
,那么您将为采样器提供统一的值:
0
。顺便说一下,通常您将采样器视为整数统一,因此正确的代码可能是:
program.setUniformi(sampler2D,0)


这告诉GLSL采样器将使用纹理单元0,实际使用的纹理将取决于绑定到该纹理单元的内容。

是否有任何方法可以找出在特定时刻绑定的纹理?大致如下:
glGetIntegerv(GL_texture_BINDING_2D,&mytex)。我不确定Java中的确切语法,因为它没有指针。有没有办法找出在特定时刻绑定了什么纹理?大致如下:
glGetIntegerv(GL\u texture\u BINDING\u 2D,&mytex)。我不确定Java中的确切语法,因为它没有指针。
public void render(Renderable renderable) {
    program.setUniformMatrix(u_worldTrans, renderable.worldTransform);
        //how to pass texture??
    //program.setUniformf(sampler2D, ????);
    renderable.mesh.render(program,
            renderable.primitiveType,
            renderable.meshPartOffset,
            renderable.meshPartSize);
}