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);
}