首页 > 解决方案 > 如何创建 VAO 和 VBO 以与 JOGL 一起使用?

问题描述

我读了这个stackoverflow 答案。并尝试运行那里给出的代码。但我得到的只是一个粉红色的屏幕。我得出的结论是问题出在 init() 方法上。我试图了解 VAO-s 和 VBO-s 是如何工作的,但我仍然不明白。大多数关于 JOGL 的示例要么跳过 VAO、VBO 部分,要么跳过带有 VAO 或 VBO 的部分,都非常复杂。有人可以告诉我我在这里做错了什么吗?:

GL3 gl = drawable.getGL().getGL3();

    gl.glEnableClientState(GL2.GL_VERTEX_ARRAY);


    gl.glEnable(GL2.GL_DEPTH_TEST);
    gl.glClearDepthf(10.0f);
    gl.glClearColor(0.8f, 0.6f, 0.8f, 1.0f);
    gl.glDepthFunc(GL2.GL_LEQUAL);

    gl.glGenBuffers(2, buffers);

    gl.glBindBuffer(GL2.GL_ARRAY_BUFFER, buffers.get(0));
    gl.glBufferData(GL2.GL_ARRAY_BUFFER, 4 * 6 * 2, vertexFB, GL3.GL_STATIC_DRAW);

    gl.glBindBuffer(GL2.GL_ARRAY_BUFFER, buffers.get(1));
    gl.glBufferData(GL2.GL_ARRAY_BUFFER, 4 * 6 * 3, colorFB, GL2.GL_STREAM_DRAW);

    gl.glGenVertexArrays(1, vertexArray);
    gl.glBindVertexArray(vertexArray.get(0));

    gl.glEnableVertexAttribArray(0);
    gl.glBindBuffer(GL2.GL_ARRAY_BUFFER, buffers.get(0));
    gl.glVertexAttribPointer(0, 2, GL.GL_FLOAT, false, 0, 0);

    gl.glEnableVertexAttribArray(1);
    gl.glBindBuffer(GL2.GL_ARRAY_BUFFER, buffers.get(1));
    gl.glVertexAttribPointer(1, 3, GL.GL_FLOAT, false, 0, 0);

我想我以某种方式绑定了 VBO-s 错误的东西。

https://codeshare.io/299wD0完整代码和着色器。颜色不显示。它渲染矩形,但它是白色的。我可以注释掉着色器部分,我仍然得到白色矩形。似乎它没有使用着色器。

标签: joglvbovao

解决方案


推荐阅读