Рисование окружности с помощью GL_POLYGON, радиус вне масштаба

Я пытаюсь нарисовать круг, используя GL_POLYGON и код, который я пробовал, работает, но радиус круга кажется не в масштабе с размером окна, и я не понимаю, почему.

Вот код:

void display()
{
glClear(GL_COLOR_BUFFER_BIT);

if(start == OFF)
{
//Set Drawing Color - Will Remain this color until otherwise specified
glColor3f(0.2, 0.3, 0.5);  //Some type of blue

//Draw Circle
glBegin(GL_POLYGON);
for(double i = 0; i < 2 * PI; i += PI / 24)
glVertex3f((cos(i) * radius) + gX,(sin(i) * radius) + gY, 0.0);
glEnd();

//Draw Circle
center_x = gX;
center_y = gY;
}

glutSwapBuffers();
}

и функция init:

void init (void)
{
/* selecionar cor de fundo (preto) */
glClearColor (0.0, 0.0, 0.0, 0.0);

/* inicializar sistema de viz. */
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
glOrtho(0.0, 1.0, 0.0, 1.0, -1.0, 1.0);
}

Я устанавливаю размер окна равным 600, а радиус, равный 1 и четверти круга, занимает все окно. Я предполагаю, что мне нужно сделать какое-то преобразование с радиусом, я просто не знаю как.

0

Решение

Матрица проекции описывает отображение от трехмерных точек сцены к двухмерным точкам области просмотра. Он преобразуется из пространства глаза в пространство клипа, а координаты в пространстве клипа преобразуются в нормализованные координаты устройства (NDC) путем деления на w компонент координат клипа. НДЦ находятся в диапазоне (-1, -1, -1) — (1,1,1).

В ортогональной проекции координаты в глазном пространстве линейно отображаются на нормализованные координаты устройства.

Ортографическая проекция

Ортогональная проекция может быть установлена glOrtho. Вы настраиваете область просмотра с нижним левым углом в (0, 0), верхним правым углом в (1, 1) и диапазоном глубины от -1 до 1:

glOrtho(0.0, 1.0, 0.0, 1.0, -1.0, 1.0);

Если вы хотите настроить проекцию, которая позволяет рисовать в масштабах окна, то вы должны сделать это следующим образом:

int wndWidth  = 800; // for example a window with the size 800*600
int wndHeight = 600;

glOrtho( 0.0, (float)wndWidth, 0.0, (float)wndHeight, -1.0, 1.0 );

Если вы хотите, чтобы источник (0, 0) находился в центре окна, то вы должны сделать это так:

float w = (float)wndWidth/2.0f;
float h = (float)wndHeight/2.0f;

glOrtho( -w, w, -h, h, -1.0, 1.0 );

Смотрите дальше:

1

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

Других решений пока нет …

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