OpenGL рисование окружности

opengl окружность

На этом 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.

circle1

Начальная точка с координатами 90;100 будет являться центром квадрата. Теперь нарисуем окружность. Уже укажем количество сторон 30. То есть drawCircle(90, 100, 40, 30).

circle2

Полный код программы

#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(); 
}
Вы можете оставить комментарий ниже.

Оставить комментарий

Яндекс.Метрика