绘制球体时,绘图不适用于OpenGL

时间:2017-03-21 11:28:01

标签: c opengl

我是OpenGL中的第一个,我想绘制一个带有3D图形视图的球体。

第一步,我只想绘制一个包含在结果球体中的腰带。 但是没有结果,我的所有结果窗口都用白色清除。

我的代码有问题吗?

这是我的代码:

void init();
void display();
void drawPath(int pi, int theta);
void drawQuad(int pi, int theta);

int we = -80; // - 파이
int kyong = -180; // - 세타

int main(int argc, const char * argv[]) {
    glutInit(&argc, (char**)argv);
    glutInitWindowSize(500, 500);
    glutCreateWindow("Prog09 - Goo");
    glutDisplayFunc(display);

    init();
    glutMainLoop();

    return 0;
}

void init(){
    glClearColor(1, 1, 1, 1);
    glOrtho(0, 50, 0, 50, -50, 50);
    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
    glEnable(GL_DEPTH_TEST);
}
void display(){
    glColor3f(1.0, 1.0, 1.0);

    drawPath(0, 0);
}

void drawPath(int pi, int theta){
    drawQuad(pi, theta);
}

void drawQuad(pi, theta){
    int i;
    GLfloat x[4],y[4],z[4];

//    theta = (theta * 3.14)/180;
//    pi = (pi * 3.14)/180;

    x[0] = sin(theta)*cos(pi);
    y[0] = cos(theta)*sin(pi);
    z[0] = sin(pi);

    x[1] = sin(theta)*cos(pi+20);
    y[1] = cos(theta)*sin(pi+20);
    z[1] = sin(pi+20);

    x[2] = sin(theta+20)*cos(pi+20);
    y[2] = cos(theta+20)*sin(pi+20);
    z[2] = sin(pi+20);

    x[3] = sin(theta+20)*cos(pi);
    y[3] = cos(theta+20)*sin(pi);
    z[3] = sin(pi);


    for (i = 0; i < 4; i++) {
        glBegin(GL_POLYGON);
        glVertex3f(x[i]*10, y[i]*10, z[i]*10);
        glEnd();

    }
    glFlush();

    for (i = 0; i < 4; i++) {
        printf("%d. %f %f %f\n",i+1, x[i], y[i], z[i]);
    }
    printf("WHY?\n");
}

我知道这是一个基本问题,但我知道为什么我的代码不起作用。 谢谢你的帮助。

1 个答案:

答案 0 :(得分:0)

您正在绘制多个多边形,每个多边形只包含一个点:

for (i = 0; i < 4; i++) {
    glBegin(GL_POLYGON);
    glVertex3f(x[i]*10, y[i]*10, z[i]*10);
    glEnd();
}

如果你想用所有点绘制一个多边形,那么你必须做类似的事情:

glBegin(GL_POLYGON);
for (i = 0; i < 4; i++) {
    glVertex3f(x[i]*10, y[i]*10, z[i]*10);
}
glEnd();
相关问题