Рисование круга на OpenGL - PullRequest
       58

Рисование круга на OpenGL

0 голосов
/ 07 сентября 2018

Этот код должен просто нарисовать круг на окне, но круг не появляется. Я использую функцию glVertex2f.

#include <GLUT/glut.h>
#include <math.h>

void init(void) {
    glClearColor(0.686, 0.933, 0.933,0.0);
    glMatrixMode(GL_PROJECTION);
    gluOrtho2D(0.0,200.0,0.0,150.0);
}
void lineSegment(void) {
    float theta;
    int posX = 400;
    int posY = 400;
    int radio = 100;
    glClear(GL_COLOR_BUFFER_BIT);
    glColor3f(0.0,0.4,0.2);
    glBegin(GL_POLYGON);
    for(int i=0; i<360; i++){
        theta = i*3.1416/180;
        glVertex2f(posX + radio*cos(theta), posY + radio*sin(theta));
    }
    glEnd();
    glFlush();
}


int main(int argc, char** argv) {
    glutInit(&argc, argv);
    glutInitDisplayMode(GLUT_SINGLE | GLUT_RGB);
    glutInitWindowPosition(50,50);
    glutInitWindowSize(800,800);
    glutCreateWindow("Cerámica Ana");
    init();
    glutDisplayFunc(lineSegment);
    glutMainLoop();
}

1 Ответ

0 голосов
/ 07 сентября 2018

Вы настроили ортографическую проекцию:

gluOrtho2D(0.0,200.0,0.0,150.0);

Геометрия внутри прямоугольника, которая определяется ортогональной проекцией, проецируется в области просмотра. Это означает, что геометрия с координатами от (0,0) до (200, 150) видна в окне просмотра. Геометрия вне этой области обрезается.

Но центр круга находится в точке (500, 500), а радиус равен 100. Таким образом, он не находится внутри области отсечения.

Поскольку размер области просмотра (800, 800), я рекомендую адаптировать ортографическую проекцию к области просмотра.
См. gluOrtho2D и glOrtho.

Измените ортографическую проекцию, чтобы решить проблему:

glMatrixMode(GL_PROJECTION);
gluOrtho2D(0.0, 800.0, 0.0, 800.0);
...