Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/374.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
Java 如何将附加纹理链接到着色器中。LibGDX_Java_Android_Opengl Es_Libgdx - Fatal编程技术网

Java 如何将附加纹理链接到着色器中。LibGDX

Java 如何将附加纹理链接到着色器中。LibGDX,java,android,opengl-es,libgdx,Java,Android,Opengl Es,Libgdx,我真的被这个问题难住了。 我需要将纹理链接到着色器,以便像置换贴图一样使用它。 这是我的密码: //create method displacement = new Texture(Gdx.files.internal("displacementMap.png")); shaderProgram = new ShaderProgram(Gdx.files.internal("vertexShader.vert"),Gdx.files.internal("fragmentShade

我真的被这个问题难住了。 我需要将纹理链接到着色器,以便像置换贴图一样使用它。 这是我的密码:

//create method
    displacement = new Texture(Gdx.files.internal("displacementMap.png"));
    shaderProgram = new ShaderProgram(Gdx.files.internal("vertexShader.vert"),Gdx.files.internal("fragmentShader.frag"));

    shaderProgram.pedantic = false;
    batch.setShader(shaderProgram);

    shaderProgram.setUniformi("u_texture2",1);
    Gdx.gl.glActiveTexture(GL_TEXTURE1);
    displacement.bind();
    Gdx.gl.glActiveTexture(GL_TEXTURE0);

//render method
    Gdx.gl.glClearColor(0, 0, 0, 1);
    Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT);
    batch.begin();
    image.draw(batch);
    batch.end();
我的片段着色器是:

#ifdef GL_ES
#define LOWP lowp
precision mediump float;
#else
#define LOWP
#endif
varying LOWP vec4 v_color;
varying vec2 v_texCoords;
uniform sampler2D u_texture;
uniform sampler2D u_texture2;
void main(){

vec4 buf = texture2D(u_texture, v_texCoords);
gl_FragColor = buf;

}
因此,通过将
u_纹理
更改为
u_纹理2
,我意识到这两种纹理都被设置为我的“图像”。
希望任何人都能提供帮助,谢谢。

要设置着色器制服,必须首先绑定着色器:

shaderProgram.begin();
shaderProgram.setUniformi("u_texture2",1);
shaderProgram.end();
请注意,上述操作只需执行一次,该值将与着色器保持一致


您正确绑定了纹理,但最好在批处理.begin()之前进行绑定,以防您将其他纹理绑定到应用程序中其他地方的纹理单元。您必须确保调用
Gdx.gl.glActiveTexture(gl_TEXTURE0)绑定后,因为SpriteBatch始终假定活动纹理保留为0。

要设置着色器,必须首先绑定着色器:

shaderProgram.begin();
shaderProgram.setUniformi("u_texture2",1);
shaderProgram.end();
请注意,上述操作只需执行一次,该值将与着色器保持一致

您正确绑定了纹理,但最好在批处理.begin()之前进行绑定,以防您将其他纹理绑定到应用程序中其他地方的纹理单元。您必须确保调用
Gdx.gl.glActiveTexture(gl_TEXTURE0)绑定后,因为SpriteBatch始终假定活动纹理保留为0