OpenGL VAO总是从原点绘制第一个Vertex

时间:2015-02-15 23:37:08

标签: opengl d vao

标题总结了我的问题,但无论我将第一个顶点设置为什么,OpenGL总是在原点绘制它。我在学校的计算机上试过这个并不是问题,但我不在学校,我可能会改变一些问题。无论如何,我认为没有理由这样做。如果语法看起来很奇怪,这段代码用D编写,但应该是C的几乎无缝的端口。

我的代码是:

class Mesh
{
this(vec3[] vertices, uint[] indices)
{    
    draw_count = indices.length;

    glGenVertexArrays(1, &vertex_array_object);
    glBindVertexArray(vertex_array_object);

    glGenBuffers(NUM_BUFFERS, vertex_array_buffers.ptr);
    glBindBuffer(GL_ARRAY_BUFFER, vertex_array_buffers[POSITION_VB]);
    glBufferData(GL_ARRAY_BUFFER, vertices.length * vertices.sizeof, vertices.ptr, GL_STATIC_DRAW);

    glEnableVertexAttribArray(0);
    glVertexAttribPointer(cast(GLuint)0, 3, GL_FLOAT, GL_FALSE, 0, cast(void*)0);

    glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, vertex_array_buffers[INDEX_VB]);
    glBufferData(GL_ELEMENT_ARRAY_BUFFER, indices.length * indices.sizeof, indices.ptr, GL_STATIC_DRAW);

    glBindVertexArray(0);
}
void draw()
{
    glBindVertexArray(vertex_array_object);

    glDrawElements(GL_TRIANGLES, draw_count, GL_UNSIGNED_INT, cast(const(void)*)0);

    glBindVertexArray(0);
}
private:
    enum 
    {
        POSITION_VB,
        INDEX_VB,
        NORMAL_VB,
        NUM_BUFFERS
    };
GLuint vertex_array_object;
GLuint vertex_array_buffers[NUM_BUFFERS];
vec3 normals;
int draw_count;
}

0 个答案:

没有答案