在OpenGL上绘制圆

时间:2018-09-06 23:18:49

标签: c++ opengl drawing geometry orthographic

该代码应该仅在窗口上绘制一个圆,但该圆不会显示。我正在使用函数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 :(得分:3)

您已经设置了正交投影:

gluOrtho2D(0.0,200.0,0.0,150.0);

由正交投影定义的矩形内的几何图形投影在视口上。这意味着坐标在(0,0)到(200,150)之间的几何图形在视口上可见。裁剪了此区域之外的几何。

但是圆心在(500,500),半径为100。因此它不在剪切区域内。

由于视口的大小为(800,800),所以我建议将正交投影调整为适合视口。
参见gluOrtho2DglOrtho

更改正射投影以解决问题:

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