На этом C++ уроке мы рассмотрим рисование окружности в OpenGL. Вообще, окружность можно представить как многоугольник с очень большим количеством сторон. Чем сторон будет больше, тем более сглаженной будет окружность. Текст функции drawCircle.
void drawCircle(float x, float y, float r, int amountSegments) { glBegin(GL_LINE_LOOP); for(int i = 0; i < amountSegments; i++) { float angle = 2.0 * 3.1415926 * float(i) / float(amountSegments); float dx = r * cosf(angle); float dy = r * sinf(angle); glVertex2f(x + dx, y + dy); } glEnd(); }
Для начала нарисуем квадрат. Вызываем функцию drawCircle и укажем количеством сторон 4. Например, drawCircle(90, 100, 40, 4). Начальная точка будет иметь координаты 90;100, радиус 40, количество сторон 4.
Начальная точка с координатами 90;100 будет являться центром квадрата. Теперь нарисуем окружность. Уже укажем количество сторон 30. То есть drawCircle(90, 100, 40, 30).
Полный код программы
#include "glut.h" #include <cmath> void drawCircle(float x, float y, float r, int amountSegments) { glBegin(GL_LINE_LOOP); for(int i = 0; i < amountSegments; i++) { float angle = 2.0 * 3.1415926 * float(i) / float(amountSegments); float dx = r * cosf(angle); float dy = r * sinf(angle); glVertex2f(x + dx, y + dy); } glEnd(); } void display() { glClear(GL_COLOR_BUFFER_BIT); drawCircle(90, 100, 40, 30); glFlush(); } void main() { glutInitDisplayMode(GLUT_SINGLE | GLUT_RGB); glutInitWindowSize(500, 500); glutInitWindowPosition(100, 140); glutCreateWindow("OpenGL window"); glClearColor(0, 0, 1, 1); glMatrixMode(GL_PROJECTION); glLoadIdentity(); gluOrtho2D(0, 200, 200, 0); glutDisplayFunc(display); glutMainLoop(); }