1. Este site usa cookies. Ao continuar a usar este site está a concordar com o nosso uso de cookies. Saber Mais.

Duvidas de Opengl e c/c++

Discussão em 'Programação' iniciada por tofas, 23 de Março de 2006. (Respostas: 3; Visualizações: 1588)

  1. boas,

    eu estou a iniciar em opengl...e SOS!!! [​IMG] [​IMG] [​IMG] [​IMG]

    e queria por uma imagem a piscar.... ou seja tenho 1 imagem 1 depois aparece a imagem 2 e depois a imagem 1 e assim sucessivamente....e fiz isto:

    Código
    GeSHi (c):
    #include<stdio.h>
    #include<GL/glut.h>


    void init(void){

    glClearColor(1.0,1.0,1.0,0.0);
    glMatrixMode(GL_PROJECTION);
    glLoadIdentity();
    gluOrtho2D(0.0,500.0,0.0,500.0);

    }


    void quadrado1(void){

    glClear(GL_COLOR_BUFFER_BIT);
    glBegin(GL_QUADS);
    glColor3f(1.0,0.0,0.0);
    glVertex2i(30,30);
    glVertex2i(30,60);
    glVertex2i(60,60);
    glVertex2i(60,30);


    glEnd();

    glFlush();

    }

    void quadrado2(void){

    glClear(GL_COLOR_BUFFER_BIT);
    glBegin(GL_QUADS);

    glBegin(GL_POLYGON);
    glColor3f(1.0,1.0,0.0);
    glVertex2f(125.0,125.0);
    glVertex2f(375.5,125.0);
    glVertex2f(375.0,375.0);
    glVertex2f(125.0,375.0);

    glEnd();

    glFlush();

    }


    int main(int argc, char** argv){
    glutInit(&argc, argv);
    glutInitDisplayMode( GLUT_SINGLE | GLUT_RGB);

    glutInitWindowSize(500,500);
    glutInitWindowPosition(100,100);

    glutCreateWindow("piscar ganhou!! ");

    init();

    glutDisplayFunc(quadrado);

    do{
    glClearColor(1.0,1.0,1.0,0.0);
    glutDisplayFunc(quadrado1);
    glClearColor(1.0,1.0,1.0,0.0);
    glutDisplayFunc(quadrado2);

    glutMainLoop();
    }while(1);





    return 0;
    }Created by GeSHI 1.0.7.5

    mas nao funciona...pois aparece spr o ultimo display...

    devo estar a fazer asneiras...so pode...

    ja agora a ideia inicial era por numa imagem....a dizer: conseguiste!! mas as letras a piscar...
     
  2. Não entendo nada de GLUT, mas possivelmente o display é rápido demais para veres o primeiro objecto. Tenta colocar um temporizador para visualizar um e passado algum tempo o segundo quadrado.

    Tens uma chamada a glBegin(GL_POLYGON); que não faz sentido em quadrado2().

    O teu código em main() deveria estar mais limpo, algo tipo:

    glutInit(&argc, argv);
    glutInitWindowSize(500,500);
    glutInitWindowPosition(100,100);
    glutInitDisplayMode( GLUT_SINGLE | GLUT_RGB);

    glutCreateWindow("piscar ganhou!! ");

    init();

    glutDisplayFunc(display);
    glutIdleFunc(idle);

    glutMainLoop();

    onde o callback idle() seria um simples:

    static void idle(void)
    {
    glutPostRedisplay();
    }

    e no callback display()

    estarias a enviar para a grafica o codigo de desenho dos quadrados...
     
  3. Karmack

    Karmack Power Member

    Tens de ter apenas uma função e registar com o glutDisplayFunc. Ou seja o main() apenas serve para registar funções. Nao podes ter um ciclo infinito no main(). Quando o ecran irá ser desenhado será chamada a função registada com o glutDisplayFunc.

    O melhor é ter apenas um quadrado() nesse quadrado guardas uma variavel que diz qual a proxima côr que o quadrado irá ser desenhado.

    Podes ter algo do genero:

    typedef enum {
    BRANCO,
    VERMELHO
    } Cor;

    Cor cor = BRANCO;

    quadrado() {
    glClear(GL_COLOR_BUFFER_BIT);
    glBegin(GL_QUADS);

    if(cor == BRANCO) {
    glColor3f(1.0,0.0,0.0);
    cor = VERMELHO
    } else {
    glColor3f(1.0,1.0, .0);
    cor = BRANCO
    }
    glVertex2i(30,30);
    glVertex2i(30,60);
    glVertex2i(60,60);
    glVertex2i(60,30);
    }


    main() {
    ...
    ...
    glutDisplayFunc(quadrado)
    }
     
  4. Thorax

    Thorax Power Member

    Aprendes-te a trabalhar com as Stacks.. (PILHAS) que tens de fazer os push e os pops.. julgo que deve ser isso porque nao consegues fazer o que queres fazer.. no entanto tens muitas informações no www.google.pt so tens mesmo de pesquisar. No entanto também podes consultar este link pode ser que la contenha o que queres saber http://www.oc-zone.com/modules.php?name=Articles&rop=conteudo&id=73
     

Partilhar esta Página