【问题标题】:LWJGL - Quad not being renderedLWJGL - 四边形没有被渲染
【发布时间】:2015-01-12 08:35:47
【问题描述】:

我一直试图让这段代码工作一段时间,但我仍然无法弄清楚我做错了什么。 (LWJGL - Java)

我曾尝试在网上查看其他人的代码,但找不到任何重大差异。我实际上学会了将 OpenGL 与 C++ 一起使用,所以我的思绪可能会停留在它上面,这可能就是我找不到错误的原因。

这里是初始化(调用一次)

FloatBuffer vertices = BufferUtils.createFloatBuffer(4 * 5);
    vertices.put(new float[]{
            // pos                  // Color
            0.5f, 0.5f,             0.5f, 0.0f, 0.5f,
            0.5f, -0.5f,            0.5f, 0.0f, 0.75f,
            -0.5f, -0.5f,           0.0f, 1.0f, 0.0f,
            -0.5f, 0.5f,            0.5f, 0.5f, 1.0f
    });
    vertices.flip();

    ByteBuffer indices = BufferUtils.createByteBuffer(2 * 3);
    indices.put(new byte[]{
            0, 1, 3,
            1, 2, 3
    });
    indices.flip();

    // VAO
    VAO = GL30.glGenVertexArrays();
    GL30.glBindVertexArray(VAO);

    // VBO
    VBO = glGenBuffers();
    glBindBuffer(GL_ARRAY_BUFFER, VBO);
    glBufferData(GL_ARRAY_BUFFER, vertices, GL_STATIC_DRAW);

    // EBO
    EBO = glGenBuffers();
    glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, EBO);
    glBufferData(GL_ELEMENT_ARRAY_BUFFER, indices, GL_STATIC_DRAW);

    glBindBuffer(GL_ARRAY_BUFFER, VBO);

    glEnableVertexAttribArray(0);
    //                         v - position in layout (see shader)
    //                            v - Nb of component per vertex (2 for 2D (x, y))
    //                                                v - Normalized ? (between 0 - 1)
    //                                                       v - Offset between things (size of a line)
    //                                                                     v - Where to start ?
    glVertexAttribPointer(0, 2, GL11.GL_FLOAT, false, 5 * Float.SIZE , 0);

    glEnableVertexAttribArray(1);
    glVertexAttribPointer(1, 3, GL11.GL_FLOAT, false, 5 * Float.SIZE , 2 * Float.SIZE);

    glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, EBO);

    // Unbinds the VAO
    GL30.glBindVertexArray(0);
    glDisableVertexAttribArray(0);
    glDisableVertexAttribArray(1);

这里是渲染函数:

shaderProgram.bind();

GL30.glBindVertexArray(VAO);

GL11.glDrawElements(GL11.GL_TRIANGLES, 6, GL11.GL_BYTE, 0);

GL30.glBindVertexArray(0);

glBindBuffer(GL_ARRAY_BUFFER, 0);

着色器:

顶点:

#version 330 core

layout(location = 0) in vec2 position;
layout(location = 1) in vec3 color;

out vec4 Color;

void main()
{
    gl_Position = vec4(position, 0.0, 1.0);
    Color = vec4(color, 1.0);
}

框架:

#version 330 core

in vec4 Color;

out vec4 color;

void main()
{
    color = Color;
}

【问题讨论】:

    标签: java opengl shader render lwjgl


    【解决方案1】:

    official Java documentation中,Float.SIZE定义为:

    用于表示浮点值的位数

    由于glVertexAttribPointer() 需要以字节为单位的步幅和偏移量参数,因此您必须将其除以 8,并改用 (Float.SIZE / 8)

    【讨论】:

    • 似乎什么也没做。调试起来非常困难,因为我无法访问属性
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-12-12
    • 2021-06-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多