예제 #1
0
void ProblemDialog::doShowEquation()
{
    readPixmap(lblEquationPixmap,
               QString(":/images/equations/%1/%1_%2.png")
               .arg(physicFieldToStringKey((PhysicField) cmbPhysicField->itemData(cmbPhysicField->currentIndex()).toInt()))
               .arg(analysisTypeToStringKey((AnalysisType) cmbAnalysisType->itemData(cmbAnalysisType->currentIndex()).toInt())));
}
예제 #2
0
int main(int argc, char **argv)
{
    MODEL *psModel;
    const int width = 640, height = 480;
    SDL_Event event;
    GLfloat angle = 0.0f;
    const float aspect = (float)width / (float)height;
    bool quit = false;
    float dimension = 0.0f;
    int i;
    char path[PATH_MAX];

    parse_args(argc, argv);

    /* Initialize SDL */
    if (SDL_Init(SDL_INIT_VIDEO | SDL_INIT_TIMER) < 0)
    {
        fprintf(stderr, "Couldn't initialize SDL: %s\n", SDL_GetError());
        exit(EXIT_FAILURE);
    }
    atexit(SDL_Quit);

    psModel = readModel(input, SDL_GetTicks());
    strcpy(path, texPath);
    strcat(path, psModel->texPath);
    psModel->pixmap = readPixmap(path);

    SDL_GL_SetAttribute(SDL_GL_DOUBLEBUFFER, 1);

    /* Initialize the display */
    screen = SDL_SetVideoMode(width, height, 0, SDL_OPENGL|SDL_ANYFORMAT);
    if (screen == NULL)
    {
        fprintf(stderr, "Couldn't initialize display: %s\n", SDL_GetError());
        exit(EXIT_FAILURE);
    }

    printf("OpenGL version: %s\n", glGetString(GL_VERSION));
    printf("OpenGL renderer: %s\n", glGetString(GL_RENDERER));
    printf("OpenGL vendor: %s\n", glGetString(GL_VENDOR));

    resizeWindow(width, height);
    glEnable(GL_TEXTURE_2D);
    glDisable(GL_FOG);
    glDisable(GL_LIGHTING);
    glEnable(GL_BLEND);
    glEnable(GL_DEPTH_TEST);
    glDepthFunc(GL_LEQUAL);
    glClearDepth(1.0f);
    glClearColor(0.0f, 0.0f, 0.0f, 0.0f);
    glEnableClientState(GL_VERTEX_ARRAY);
    glEnableClientState(GL_TEXTURE_COORD_ARRAY);

    glMatrixMode(GL_PROJECTION);
    glLoadIdentity();
    gluPerspective(45.0f, aspect, 0.1f, 500.0f);
    glMatrixMode(GL_MODELVIEW);

    prepareModel(psModel);
    for (i = 0; i < psModel->meshes; i++)
    {
        int j;
        MESH *psMesh = &psModel->mesh[i];

        for (j = 0; j < psMesh->vertices * 3; j++)
        {
            dimension = MAX(fabs(psMesh->vertexArray[j]), dimension);
        }
    }

    /* Find model size */

    while (!quit)
    {
        now = SDL_GetTicks();
        while (SDL_PollEvent(&event))
        {
            SDL_keysym *keysym = &event.key.keysym;

            switch (event.type)
            {
            case SDL_VIDEORESIZE:
                resizeWindow(event.resize.w, event.resize.h);
                break;
            case SDL_QUIT:
                quit = true;
                break;
            case SDL_KEYDOWN:
                switch (keysym->sym)
                {
                case SDLK_F1:
                    glEnable(GL_CULL_FACE);
                    printf("Culling enabled.\n");
                    break;
                case SDLK_F2:
                    glDisable(GL_CULL_FACE);
                    printf("Culling disabled.\n");
                    break;
                case SDLK_F3:
                    glDisable(GL_TEXTURE_2D);
                    glPolygonMode(GL_FRONT_AND_BACK, GL_LINE);
                    printf("Wireframe mode.\n");
                    break;
                case SDLK_F4:
                    glEnable(GL_TEXTURE_2D);
                    glPolygonMode(GL_FRONT_AND_BACK, GL_FILL);
                    printf("Texturing mode.\n");
                    break;
                case SDLK_ESCAPE:
                    quit = true;
                    break;
                case SDLK_KP_PLUS:
                case SDLK_PLUS:
                    for (i = 0; i < psModel->meshes; i++)
                    {
                        MESH *psMesh = &psModel->mesh[i];

                        if (!psMesh->teamColours)
                        {
                            continue;
                        }

                        if (psMesh->currentTextureArray < 7)
                        {
                            psMesh->currentTextureArray++;
                        }
                        else
                        {
                            psMesh->currentTextureArray = 0;
                        }
                    }
                    break;
                default:
                    break;
                }
                break;
            }
        }

        glLoadIdentity();
        glTranslatef(0.0f, -30.0f, -50.0f + -(dimension * 2.0f));;
        glRotatef(angle, 0, 1, 0);
        glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT);
        drawModel(psModel, now);
        SDL_GL_SwapBuffers();
        SDL_Delay(10);
        angle += 0.1;
        if (angle > 360.0f)
        {
            angle = 0.0f;
        }
    }

    glDisableClientState(GL_VERTEX_ARRAY);
    glDisableClientState(GL_TEXTURE_COORD_ARRAY);
    freeModel(psModel);

    return 0;
}