使用多个着色器

时间:2013-01-11 17:23:30

标签: java opengl model shader

我正在研究我的学校项目并开始它。提供了一个框架,我设法加载SGF模型并显示它,但当我想使用另一个着色器从顶点创建一个简单的纹理地板时,它只显示模型(编译后,地板可见0.5秒但后来消失)有什么建议吗?

    public void display(GLAutoDrawable drawable) {
    final GL3 gl = drawable.getGL().getGL3();
    loader.setUniformMatrix("projection", projection);

    gl.glClear(GL3.GL_COLOR_BUFFER_BIT | GL3.GL_DEPTH_BUFFER_BIT);

    myTexture.bind(gl, modeling, "my_texture");
    myTexture.bind(gl, modeling, "my_texture2");

    myTexture.bind(gl, program, "my_texture");
    myTexture.bind(gl, program, "my_texture2");

    Mat4 mv = MatrixMath.lookAt(this.eyeX,this.eyeY,this.eyeZ,this.at,this.up);
    program.setUniformMatrix("model_view", mv);
    program.use(gl);

    gl.glDrawArrays(GL3.GL_TRIANGLES, 0, numVertices);
    // 2nd part
   // modeling.setUniformMatrix("model_view", mv);
    modeling.setUniformMatrix("model_view", mv);
    modeling.use(gl);
        for (Map.Entry<String, VertexBufferObject> entry : vboHashMap.entrySet()) {
            String key = entry.getKey();
            entry.getValue().bind(gl);
            gl.glDrawArrays(GL3.GL_TRIANGLES, 0, SGFLoader.getNumVertices(key));
        }
}

当我在第二部分(负责加载模型)之后删除线条时,木板是可见的,否则它只会渲染模型。

任何sugestions?

1 个答案:

答案 0 :(得分:1)

看起来你没有在display()方法中绑定地板的顶点数组。我猜你在设置一切时绑定它一次,但忘记每帧再次绑定它,这可以解释为什么它会在几分之一秒内闪烁。

OpenGL不是面向对象的。当你致电glDrawArrays时,它会绘制你最后绑定的数组。