0

我正在做我的学校项目,刚刚开始。提供了一个框架,我设法加载一个 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));
        }
}

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

有什么建议吗?

4

1 回答 1

1

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

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

于 2013-01-11T17:35:46.080 回答