2

我无法将 sampler2d 制服从我的代码传递到着色器。我的着色器中有这一行:

uniform sampler2D u_texture;

在代码中,我使用在搅拌机中创建的 g3db 模型(带有纹理):

AssetManager assets = new AssetManager();
    assets.load(data+"/earth.g3db", Model.class);
    assets.finishLoading();
    Model earthModel = assets.get(data+"/earth.g3db", Model.class);
    earthPlanet = new ModelInstance(earthModel,0,-1,0);

我使用 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);
}

我会很高兴得到任何回应。谢谢!

4

1 回答 1

6

您的困惑源于您认为您将纹理传递给采样器制服的事实。不是这种情况。

当您给采样器制服一个值时,您应该提供的值是纹理单元。假设您有一个纹理并将其绑定到GL_TEXTURE0,那么您将为采样器统一赋予值:0。顺便说一句,通常您将采样器视为整数制服,因此正确的代码可能是:program.setUniformi (sampler2D, 0);

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

于 2013-09-15T02:30:14.230 回答