libgdx:网格颜色没有使它成为顶点着色器

时间:2017-03-02 05:05:36

标签: opengl libgdx glsl shader

我已经实现了自己的着色器(见下文),我用它在ModelBatch中渲染网格物体。着色器程序似乎绑定正确,因为我可以在正确的位置看到屏幕上的几何体,因此摄像机变换也正确设置。

setUserVisibleHint()

我现在唯一的问题是颜色不会下降。我有一些网格,我设置如下,漫反射颜色。

public class ModelShader implements Shader {

    ShaderProgram program;
    Camera camera;
    RenderContext context;
    int u_projTrans;
    int u_worldTrans;

    public void init() {
        String vert = Gdx.files.internal("first_vertex.glsl").readString();
        String frag = Gdx.files.internal("first_fragment.glsl").readString();
        program = new ShaderProgram(vert, frag);
        if (!program.isCompiled()) {
            throw new GdxRuntimeException(program.getLog());
        }
        u_projTrans = program.getUniformLocation("u_projTrans");
        u_worldTrans = program.getUniformLocation("u_worldTrans");
    }

    public void dispose() { ... }

    public void begin(Camera camera, RenderContext context) {
        this.camera = camera;
        this.context = context;
        program.begin();
        program.setUniformMatrix(u_projTrans, camera.combined);
        context.setDepthTest(GL20.GL_LEQUAL);
        context.setCullFace(GL20.GL_BACK);
    }

    public void render(Renderable renderable) {
        program.setUniformMatrix(u_worldTrans, renderable.worldTransform);
        renderable.meshPart.render(program);
    }

    public void end() {
        program.end();
    }

    public int compareTo(Shader other) { ... }

    public boolean canRender(Renderable instance) {
        return true;
    }
}

我已经验证了顶点着色器中的颜色是否正在进入片段着色器,但是当我将顶点着色器变为属性设置为 a_color 时,场景全是红色让我觉得颜色根本没有下降。当我使用内置着色器时,我有这些网格的有效颜色,所以我做错了。

model = modelBuilder.createBox(1f, SIZE, SIZE, new Material(ColorAttribute.createDiffuse(Color.MAGENTA)), Usage.Position | Usage.Normal);
box = new ModelInstance(model);

a_color 是否在此处使用了错误的属性?我应该手动绑定一些东西,还是全部由 meshPart.render()调用完成?

0 个答案:

没有答案