具有多个VBO的Opengl索引渲染

时间:2019-02-08 22:07:19

标签: opengl glfw vbo glew indices

我是OpenGL的初学者,并且在渲染对象时遇到了问题(我将其称为实体)。

我有一个单独的Renderer对象,该对象仅处理绘制调用,并且传入要渲染的实体。

现在我遇到的问题是,当我打电话给glDrawElements()时,它什么也没画。

我检查了每个数组中是否包含正确的内容,并且所有缓冲区均有效,而且我的着色器与其他渲染方法完美配合。 我在这里查看了其他问题,并且我拥有使用正常顶点渲染的实体的有效渲染功能。

我的渲染功能

void render(Entity model,EntityShader shader) {
        glBindVertexArray(model.getVao());
        mat4 modelMatrix = mat4();
        scale(modelMatrix, vec3(2.0));
        translate(modelMatrix, vec3(5.0f,0.0f, 0.0f));
        shader.loadTransformationMatrix(modelMatrix);
        glDrawElements(GL_TRIANGLES,model.getSize(),GL_UNSIGNED_SHORT,(void*)0);
        glBindVertexArray(0);
    }

我实体的BufferLoader部件

GLuint vao, iv, pv, nv, tv;

    glGenBuffers(1, &tv);
    glGenBuffers(1, &nv);
    glGenBuffers(1, &pv);
    glGenBuffers(1, &iv);

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

    glBindBuffer(GL_ARRAY_BUFFER, pv);
    glBufferData(GL_ARRAY_BUFFER, vertices.size() * sizeof(vec3), &vertices[0], GL_STATIC_DRAW);

    glVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE, 3 * sizeof(GLfloat), (GLvoid *)0);
    glEnableVertexAttribArray(0);

    glBindBuffer(GL_ARRAY_BUFFER, nv);
    glBufferData(GL_ARRAY_BUFFER, normals.size() * sizeof(vec3), &normals[0], GL_STATIC_DRAW);

    glVertexAttribPointer(1, 3, GL_FLOAT, GL_FALSE, 3 * sizeof(GLfloat), (GLvoid *)0);
    glEnableVertexAttribArray(1);

    glBindBuffer(GL_ARRAY_BUFFER, tv);
    glBufferData(GL_ARRAY_BUFFER, uvs.size() * sizeof(vec2), &uvs[0], GL_STATIC_DRAW);

    glVertexAttribPointer(2, 2, GL_FLOAT, GL_FALSE, 2 * sizeof(GLfloat), (GLvoid *)0);
    glEnableVertexAttribArray(2);

    glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, iv);
    glBufferData(GL_ELEMENT_ARRAY_BUFFER,indices.size()*sizeof(unsigned short), &indices.front(), GL_STATIC_DRAW);

    glBindVertexArray(0);

这是数据结构:

    vector <vec3> vertices;
    vector <vec2>  uvs;
    vector <vec3>  normals;
    vector <unsigned short>indices;

These are my locals at glDrawElments() 预先感谢您的回答。

0 个答案:

没有答案