我是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() 预先感谢您的回答。