2015-12-24 4 views
0

Je veux créer une fenêtre couvrant tout mon écran de bureau avec les couleurs RVB puis VIBGYOR. Le délai de couleur devrait être d'une seconde. C'est le code que j'ai écrit mais la sortie n'est pas comme prévu. Quelqu'un peut-il me dire où je me trompe?Afficher la fenêtre RGB sous Linux en utilisant OpenGL et Freeglut

#include<GL/freeglut.h> 
#include<GL/glut.h> 
#include<stdio.h> 

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

    glutInitWindowSize(1280,1024); 
    glutCreateWindow("Displays"); 
    glutFullScreen(); 

    glClearColor (1.0, 0.0, 0.0, 0.0);  //Red 
    glClear(GL_COLOR_BUFFER_BIT); 
    sleep(1); 

    glClearColor(0,1,0,0);    //Green 
    glClear(GL_COLOR_BUFFER_BIT); 
    sleep(1); 

    glClearColor(0,0,1,0); 
    glClear(GL_COLOR_BUFFER_BIT);   //Blue 
    sleep(1); 

    glClearColor(0.933, 0.510, 0.933, 0.0);  //violet 
    glClear(GL_COLOR_BUFFER_BIT); 
    sleep(1); 

    glClearColor(0.294, 0.000, 0.510, 1);  //Indigo 
    glClear(GL_COLOR_BUFFER_BIT); 
    sleep(1); 

    glClearColor(0,0,1,1);    //Blue 
    glClear(GL_COLOR_BUFFER_BIT); 
    sleep(1); 

    glClearColor(0,0.502,0,1);   //Green 
    glClear(GL_COLOR_BUFFER_BIT); 
    sleep(1); 

    glClearColor(1,1,0,1);    //Yellow 
    glClear(GL_COLOR_BUFFER_BIT); 
    sleep(1); 

    glClearColor(1,0.647,0,1);   //Orange 
    glClear(GL_COLOR_BUFFER_BIT); 
    sleep(1); 

    glClearColor(1,0,0,1);    //Red 
    glClear(GL_COLOR_BUFFER_BIT); 
    sleep(1); 

glutMainLoop(); 
} 

Merci.

Répondre

1

Vous initialisez le mode d'affichage avec GLUT_DOUBLE (double buffering), vous devez ajouter gluSwapBuffers() chaque fois que vous avez terminé de travailler avec le tampon et souhaitez l'afficher.

... 
glClearColor(1,0,0,1);    //Red 
glClear(GL_COLOR_BUFFER_BIT); 
glutSwapBuffers(); 
sleep(1); 
... 

Difference between single buffered(GLUT_SINGLE) and double buffered drawing(GLUT_DOUBLE)

Lorsque vous utilisez GL_SINGLE, vous pouvez imaginer votre code de dessin directement sur l'écran.

Lorsque vous utilisez GL_DOUBLE, vous pouvez afficher deux tampons. L'un d'eux est toujours visible, l'autre ne

glut examples

nehe's legacy tutorials

What is the nicest way to close GLUT

glutLeaveMainLoop (void);

+0

Merci, Cela a fonctionné. Mais je voulais connaître la différence entre la macro GLUT_DOUBLE et GLUT_SINGLE, car dans les deux cas cela a fonctionné. Aussi, je veux écrire du texte avant l'apparition de l'affichage 1ère couleur dans la même fenêtre. Je suis passé par ce lien pour le comprendre mais ça n'a pas bien fonctionné. http://stackoverflow.com/questions/538661/how-do-i-draw-text-with-glut-opengl-in-c –

+0

@ Ac3_DeXt3R J'ai ajouté un lien, à propos de la différence a déjà été répondu, J'ai également ajouté un exemple de surabondance qui devrait vous aider à propos du texte (et de la surabondance en général) et une référence à un tutoriel facile de GL (vieux mais toujours bon pour l'apprentissage) – Alex

+0

Merci beaucoup, c'est très utile. Pouvez-vous s'il vous plaît me dire comment ** Quitter ** la fenêtre après avoir tout affiché? –