Проблемы с мерцанием OpenGL в C ++

У меня проблема, когда я просто рендеринг 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();

}
}

2

Решение

Очистите сначала, нарисуйте все кубики, затем поменяйте местами, как это:

glClear();

for (cube in cubes) { draw(cube); }

glfwSwapBuffers(_window);
glfwPollEvents();

Это должно решить это.

3

Другие решения

Вы вызываете glClear и glSwapBuffers во внутреннем цикле. Таким образом, для всего, что вы рисуете во внутреннем цикле, он очищает картинку, рисует, что вещь (один куб) меняет местами, а затем делает то же самое для следующего элемента в массиве.

Все, что не рисует куб, должно выходить за пределы этого цикла.

2

По вопросам рекламы [email protected]