for循环和GLbegin

时间:2016-01-30 04:06:07

标签: loops opengl for-loop

我正在尝试使用OpenGL在c中制作混沌游戏,出于某种原因,我现在只创建一个三角形和一个点,当我期望获得60,000点时。我认为这是因为开始和结束语句在for循环中,如果没有,那么我不确定是什么问题。任何帮助解决问题的人都将不胜感激!

BTW混沌游戏是从一个点开始,然后在三角形上选择一个随机点,然后在所选点和原点之间放置一个新点并继续,在我的情况下我会重复这个60,000次。 :)

    void display(void)
{

   glClear (GL_COLOR_BUFFER_BIT); //clears all pixels

    int choice, i;
    float x = 0.15, y = 0.85;

    glColor3f (0.0, 0.0, 0.0); //this sets the drawing color to black
    glBegin(GL_LINE_LOOP); //The triangle
        glVertex3f(0.2, 0.2, 0.0);
        glVertex3f(0.5, 0.8, 0.0);
        glVertex3f(0.8, 0.2, 0.0);
        glVertex3f(0.2, 0.2, 0.0);
    glEnd();

    glPointSize(3.0); //sets point size
    glBegin(GL_POINTS); //this is the original point
        glVertex3f(x, y, 0.0); 
    glEnd();


    for(i=0; i<60,000; i++)
    {
        choice = (rand()%3);
        switch(choice)
        {
            case 0:
                    x = (x + 0.5)/2; //this is the x1+x2/2 part of the midpoint theorem
                    y = (y + 0.8)/2; //this is the y1+y2/2 part of the midpoint theorem
                glBegin(GL_POINTS); 
                    glVertex3f(x, y, 0.0);
                glEnd();
            break;

            case 1:             
                    x = (x + 0.8)/2; 
                    y = (y + 0.2)/2;
                glBegin(GL_POINTS); 
                    glVertex3f(x, y, 0.0);
                glEnd();
            break;

            case 2:
                    x = (x + 0.2)/2;
                    y = (y + 0.2)/2;
                glBegin(GL_POINTS); 
                    glVertex3f(x, y, 0.0);
                glEnd();

            default:
            break;
        }
    }

    glFlush ();
}

void init (void) 
{
    glClearColor (1.0, 1.0, 1.0, 0.0); //this sets the background color to white

    glMatrixMode(GL_PROJECTION);
    glLoadIdentity();
    glOrtho(0.0, 1.0, 0.0, 1.0, -1.0, 1.0);
}

int main(int argc, char** argv)
{
    glutInit(&argc, argv);
    glutInitDisplayMode (GLUT_SINGLE | GLUT_RGB);
    glutInitWindowSize (250, 250); 
    glutInitWindowPosition (100, 100);
    glutCreateWindow(argv[0]);
    init ();
    glutDisplayFunc(display); 
    glutMainLoop();
    return 0;
}

1 个答案:

答案 0 :(得分:2)

尝试将60,000替换为60000。在C中,60,000的计算结果为0。

有关逗号运算符的更多信息,请参阅其上的Wikipedia entry