java - 使用多个着色器

标签 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));
        }
}

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

有什么建议吗?

最佳答案

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

OpenGL 在底层并不是面向对象的。当您调用 glDrawArrays 时,它将绘制您最后绑定(bind)的数组。

关于java - 使用多个着色器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14283409/

相关文章:

java - Jtable ArrayIndexOutOfBounds异常-1

performance - 从 JOGL 获取性能统计数据

c++ - OpenGL glm::translate 没有像希望的那样翻译矩阵

javascript - 在 Angular.js 中模型状态应该存储在哪里

java - 为什么在 Java 中 "!sort.getTestIssue().equals("Y")"不从 nasdaqlisted.txt 中删除测试股票?

java - 无法将数据库结果存储到映射中

opengl - 将模型导入 OpenGL 项目

主干.js 访问模型中的模型属性 - this.attribute VS this.get ('attribute' )?

java - 保护jar中的内部类变量

c++ - 基本 OpenGL 渲染的问题?