void myDisplayCallback()
{
// This call does NOT draw the background, it clears the screen.
// You should be doing this before drawing anything!
glClear(GL_COLOR_BUFFER_BIT);
// and now you can draw on a nice clear screen
DrawCircle();
// This doesn't 'flush' the buffers, it waits until the OpenGL
// command queue has finished executing (i.e. drawing is complete)
glFlush();
}
Для «гладких» линий в OpenGL наилучшим подходом является включение мультисэмплинга на заднем буфере. См. Раздел здесь о перенасыщении: https://www.khronos.org/opengl/wiki/Multisampling
В вашем случае (если вы вообще не собираетесь использовать двойную буферизацию), вы, вероятно, захотите использовать
glutInitDisplayMode( GLUT_RGBA | GLUT_SINGLE | GLUT_MULTISAMPLE);
и более поздние версии. включите мультисэмплинг с помощью:
glEnable(GL_MULTISAMPLE_ARB);
Я бы, вероятно, также рекомендовал использовать количество делений в вашем круге, например, 180 или 360 (а не 300). Таким образом, с общими углами (например, 30, 45, 90, 180 и т. Д.) Вы будете знать, что у вас всегда есть точка на окружности в этом месте.