gpt4 book ai didi

android - 将 "uniform sampler2D"传递给 libgdx 中的 glsl 着色器(使用 modelBatch)

转载 作者:行者123 更新时间:2023-11-29 16:05:37 25 4
gpt4 key购买 nike

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

uniform sampler2D u_texture;

在代码中,我使用在 blender 中创建的 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);
}

我很乐意收到任何回复。谢谢!

最佳答案

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

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

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

关于android - 将 "uniform sampler2D"传递给 libgdx 中的 glsl 着色器(使用 modelBatch),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18801800/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com