Я не могу отобразить простой движущийся треугольник на экране, и это происходит только тогда, когда я вызываю свою функцию с помощью glutDisplayFunc (render). Если я вызываю свою функцию как обычный вызов render(), он хорошо отображает треугольник, но в этом случае он не анимирует мой треугольник.glutDisplayFunc() не рисует, но нормальный вызов функции
Так в основном у меня есть два вопроса:
- не может нарисовать треугольник, когда вызов функции с glutDisplayFunc (рендеринга)
- не может анимировать треугольник при вызове функции, как рендеринга(), но он может нарисовать треугольник хоть.
ниже мой основной и дисплей код:
void render()
{
currentTime = glutGet(GLUT_ELAPSED_TIME);
glClear(GL_COLOR_BUFFER_BIT);
GLfloat color[] = { (float)sin(currentTime) * 0.5f + 0.5f, (float)cos(currentTime) * 0.5f + 0.5f, 0.0f, 1.0f };
glClearBufferfv(GL_COLOR, 0, color);
GLfloat attrib[] = { (float)sin(currentTime) * 0.5f, (float)cos(currentTime) * 0.6f, 0.0f, 0.0f };
glVertexAttrib4fv(0, attrib);
// Use the program object we created earlier for rendering
glUseProgram(rendering_program);
//Draw triangle
glDrawArrays(GL_TRIANGLES,0,3);
glutSwapBuffers();
}
Главная:
int main(int argc, char** argv)
{
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_RGBA);
glutInitWindowSize(600,600);
glutInitContextVersion(4,3);
glutInitContextProfile(GLUT_CORE_PROFILE);
glutCreateWindow("Shader");
if (glewInit()) {
cerr << "Unable to initialize GLEW ... exiting" << endl;
exit(EXIT_FAILURE);
}
startup();
// render(); // WORKS FINE AND DRAW TRIANGLE
glutDisplayFunc(render); //DOESN'T DRAW TRIANGLE
shutdown();
glutMainLoop();
return 0;
}
Я считаю, что шейдеры компилируются хорошо и нет никакой ошибки в той части кода, потому что он рисует треугольник без glutDisplayFunc(); и единственная проблема заключается в том, что я использую glutDisplayFunc (render); ничего не нарисовано.
Куда я иду не так? И как я могу исправить два вопроса, упомянутых выше?
Вы знаете, что вы вызываете 'shutdown()' перед вводом 'glutMainLoop()', правильно? Нет абсолютно никакой причины, по которой обратный вызов не должен вызываться с кодом, который вы нам показываете, и я уверен, что если вы установите точку останова в 'render()', отладчик будет работать в этом хотя бы один раз, если, конечно, вы отмените обратный вызов снова в 'shutdown()' ... – thokra
omg Я даже не осознавал этого. ! Он работает сейчас. Спасибо, что объяснили. –