我已经实现了自己的着色器(见下文),我用它在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()调用完成?