示例#1
0
//Called after the window and OpenGL are initialized. Called exactly once, before the main loop.
void init()
{
    tasks.push_back(new TaskOne());
    tasks.push_back(new TaskTwo());
    tasks.push_back(new TaskThree());
    tasks.push_back(new TaskFour());
    tasks.push_back(new BonusTask());

    // initialize all our new tasks
    for (TaskVector::iterator it = tasks.begin(); it != tasks.end(); it++)
    {
        ITask* task = (*it);
        task->InitializeProgram();
        task->Initialize();
    }

    currentTaskNumber = 0;
    ITask* currentTask = tasks[currentTaskNumber];
    if (currentTask != NULL)
    {
        currentTask->InitializeProgram();
    }

    glCullFace(GL_BACK);  // only back faces will be culled, if enabled
    glClearColor(0.3f, 0.3f, 0.3f, 1.0f); // color for cleaning the screen
}
示例#2
0
//Called whenever a key on the keyboard was pressed.
//The key is given by the ''key'' parameter, which is in ASCII.
//It's often a good idea to have the escape key (ASCII value 27) call glutLeaveMainLoop() to
//exit the program.
void myKeyboard(unsigned char key, int x, int y)
{
    switch (key)
    {
        case 27:
            exit(0);
            break;
        case ' ':
            currentTaskNumber = (currentTaskNumber + 1) % tasks.size();
            ITask* currentTask = tasks[currentTaskNumber];
            if (currentTask != NULL)
            {
                currentTask->InitializeProgram();
                printf("Current Task = %s\n", currentTask->ToString());
            }
            break;
    }
    glutPostRedisplay();  // Nutno, kdybychom nevolali prekresleni casovacem ci Idle
}
示例#3
0
void myMenu(int item)
{
    switch (item) {
    case 1:
    case 2:
    case 3:
    case 4:
    case 5:
        {
            currentTaskNumber = item - 1;
            ITask* currentTask = tasks[currentTaskNumber];
            if (currentTask != NULL)
            {
                currentTask->InitializeProgram();
                printf("Current Task = %s\n", currentTask->ToString());
            }
        }
        break;
    case 10: 
        spinFlag = !spinFlag;
        if (spinFlag)
        {
            glutTimerFunc(TIMER_STEP, FuncTimerCallback, 0);  
        }
        break;
    case 11:
        cullFlag = !cullFlag;  
        glutPostRedisplay();
        break;
    case 12:
        lineModeFlag = !lineModeFlag;  
        glutPostRedisplay();
        break;
    case 99:
        exit(0);
        break;    // never reached
    }

    glutPostRedisplay();  // Nutno, kdybychom nevolali prekresleni casovacem ci Idle
}