У меня проблема, когда я просто рендеринг 1 куба, все нормально, но если я добавляю несколько кубов, все они начинают мерцать … может быть потому, что они мешают друг другу, но я использую двойные дублеры, так что не должно быть. вот код метода рендера
for (std::vector<Entity *>::iterator iterator = entityArray->begin(); iterator != entityArray->end(); iterator++) {
Entity *entity = *iterator;
if (entity->getVertexBuffer() != NULL) {
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glUseProgram(entity->getVertexBuffer()->getShader()->getProgramHandle());
glLoadIdentity();
gluLookAt(_currentCamera->getPosition().x,
_currentCamera->getPosition().y,
_currentCamera->getPosition().z,
_currentCamera->getEyeVector().x,
_currentCamera->getEyeVector().y,
_currentCamera->getEyeVector().z,
_currentCamera->getUpVector().x,
_currentCamera->getUpVector().y,
_currentCamera->getUpVector().z);
glTranslatef(entity->getPosition().x, entity->getPosition().y, entity->getPosition().z);
glRotatef(entity->getRotation().x, 0.0f, 0.0f, 1.0f);
glRotatef(entity->getRotation().y, 0.0f, 1.0f, 0.0f);
glRotatef(entity->getRotation().z, 1.0f, 0.0f, 0.0f);
glScalef(entity->getScale().x, entity->getScale().y, entity->getScale().z);
glUniform4f(entity->getVertexBuffer()->getShader()->get_uColor(),
entity->getVertexBuffer()->getShaderData()->get_uColorValue().x,
entity->getVertexBuffer()->getShaderData()->get_uColorValue().y,
entity->getVertexBuffer()->getShaderData()->get_uColorValue().z,
entity->getVertexBuffer()->getShaderData()->get_uColorValue().w);
glUniform3f(entity->getVertexBuffer()->getShader()->get_uLightPosition(),
entity->getVertexBuffer()->getShaderData()->get_uLightPosition().x,
entity->getVertexBuffer()->getShaderData()->get_uLightPosition().y,
entity->getVertexBuffer()->getShaderData()->get_uLightPosition().z);entity->getVertexBuffer()->configureVertexAttributes();
entity->getVertexBuffer()->renderVertexBuffer();
glfwSwapBuffers(_window);
glfwPollEvents();
}
}
Очистите сначала, нарисуйте все кубики, затем поменяйте местами, как это:
glClear();
for (cube in cubes) { draw(cube); }
glfwSwapBuffers(_window);
glfwPollEvents();
Это должно решить это.
Вы вызываете glClear и glSwapBuffers во внутреннем цикле. Таким образом, для всего, что вы рисуете во внутреннем цикле, он очищает картинку, рисует, что вещь (один куб) меняет местами, а затем делает то же самое для следующего элемента в массиве.
Все, что не рисует куб, должно выходить за пределы этого цикла.