Я новичок в 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;
Это мои местные жители в glDrawElments () Заранее спасибо за ваши ответы.