使用和不使用着色器绘制三角形VBO

时间:2020-01-29 14:06:18

标签: java opengl glfw vbo

我正在尝试在屏幕上绘制一个简单的红色三角形。在不使用VBO的情况下,代码可以按预期工作。尝试使用VBO(带有或不带有着色器)绘制时,它根本没有效果。

我的代码:

//Works
glBegin(GL_TRIANGLES);
glVertex3f(0f, 0f, 0.0f);
glVertex3f(0.5f, 0f, 0.0f);
glVertex3f(0.5f,  0.5f, 0.0f);
glEnd();

//Does not work
int vertexArrayID = glGenVertexArrays();
glBindVertexArray(vertexArrayID);

float[] g_vertex_buffer_data = new float[]{
        0f, 0f, 0.0f,
        0.5f, 00f, 0.0f,
        0.5f,  0.5f, 0.0f,
};

int vertexbuffer = glGenBuffers();
glBindBuffer(GL_ARRAY_BUFFER, vertexbuffer);
glBufferData(GL_ARRAY_BUFFER, FloatBuffer.wrap(g_vertex_buffer_data), GL_STATIC_DRAW);

glEnableVertexAttribArray(0);
glBindBuffer(GL_ARRAY_BUFFER, vertexbuffer);

glVertexAttribPointer(
        0,                  // attribute 0. No particular reason for 0, but must match the layout in the shader.
        3,                  // size
        GL_FLOAT,           // type
        false,           // normalized?
        0,                  // stride
        0            // array buffer offset
);

glDrawArrays(GL_TRIANGLES, 0, 3); // 3 indices starting at 0 -> 1 triangle

glDisableVertexAttribArray(0);
glDeleteBuffers(vertexbuffer);
glDeleteVertexArrays(vertexArrayID);


System.out.println(glGetError());

glGetError()始终返回0。

我使用默认的,教程复制的着色器来测试我的代码(在使用上述代码之前,我链接并绑定了程序):

#version 330 core

// Input vertex data, different for all executions of this shader.
layout(location = 0) in vec3 vertexPosition_modelspace;

void main(){

    gl_Position.xyz = vertexPosition_modelspace;
    gl_Position.w = 1.0;
}
#version 330 core

// Ouput data
out vec3 color;

void main()
{
    // Output color = red
    color = vec3(1,0,0);
}

0 个答案:

没有答案