3 votes

Pourquoi plusieurs appels de fonction ne fonctionnent pas en OpenGL?

Je cherche à utiliser différentes fonctions pour créer divers objets et les appeler avec une seule fonction comme display() dans mon projet Opengl. Mais cela ne fonctionne pas, lorsque j'appelle deux fonctions, l'une s'affiche et l'autre ne s'affiche pas, je ne sais pas pourquoi,

J'ai essayé de cette manière:

#include   // pour MS Windows
#include   // GLUT, incluez glu.h et gl.h
#include 

void box() {

    glClearColor(1.0f, 1.0f, 1.0f, 1.0f); // Définir la couleur de fond en noir et opaque
    glClear(GL_COLOR_BUFFER_BIT);         // Effacer le tampon de couleur (arrière-plan)
    // Dessiner un carré rouge 1x1 centré à l'origine
    glBegin(GL_POLYGON);              // Chaque ensemble de 4 sommets forme un polygone
    glColor3f(1.0f, 0.0f, 0.0f); // Rouge
    glVertex2f(-0.9f, -0.7f);
    glVertex2f(-0.9f, 0.7f);
    glVertex2f(0.9f, 0.7f);
    glVertex2f(0.9f, -0.7f);    // x, y

    glEnd();

    glFlush();  // Rendu maintenant

}

void triangle()
{
    glClearColor(1.0f, 1.0f, 1.0f, 1.0f); // Définir la couleur de fond en noir et opaque
    glClear(GL_COLOR_BUFFER_BIT);
    glBegin(GL_POLYGON);              // Chaque ensemble de 4 sommets forme un quad
    glColor3f(0.0f, 1.0f, 0.0f); // vert

    glVertex2f(-0.9f, -0.7f);
    glVertex2f(-0.4f, 0.7f);
    glVertex2f(0.1f, -0.7f);    // x, y

    glEnd();

    glFlush();  // Rendu maintenant
}
void display()
{
    box();
    triangle();
}

/* Fonction principale : GLUT fonctionne comme une application console commençant à main()  */
int main(int argc, char** argv) {
    glutInit(&argc, argv);
    glutInitWindowSize(1000, 600);// Définir la largeur et la hauteur initiales de la fenêtre
    glutCreateWindow("Test de configuration OpenGL");
    //gluOrtho2D(-0.1,0.7,-0.1,0.3); // Créer une fenêtre avec le titre donné
    //glutInitWindowSize(500, 500);// Définir la largeur et la hauteur initiales de la fenêtre
    glutDisplayFunc(display);// Enregistrer le gestionnaire de rappel d'affichage pour la repeinture de la fenêtre
    glutMainLoop();           // Entrer dans la boucle de traitement des événements
    return 0;
}

Toute suggestion s'il vous plaît.

2voto

ybungalobill Points 31467

Vous effacez le tampon avant de rendre chacune des formes, effaçant ainsi la forme précédente que vous venez de dessiner. Au lieu de cela, vous devriez l'effacer une seule fois par display. Il en va de même pour glFlush:

void box() {
    // Dessiner un Carré Rouge 1x1 centré sur l'origine
    glBegin(GL_POLYGON);
    glColor3f(1.0f, 0.0f, 0.0f); // Rouge
    glVertex2f(-0.9f, -0.7f);
    glVertex2f(-0.9f, 0.7f);
    glVertex2f(0.9f, 0.7f);
    glVertex2f(0.9f, -0.7f);    // x, y
    glEnd();
}

void triangle()
{
    glBegin(GL_POLYGON);
    glColor3f(0.0f, 1.0f, 0.0f); // vert
    glVertex2f(-0.9f, -0.7f);
    glVertex2f(-0.4f, 0.7f);
    glVertex2f(0.1f, -0.7f);    // x, y
    glEnd();
}

void display()
{
    glClearColor(1.0f, 1.0f, 1.0f, 1.0f); // Définir la couleur de fond en blanc et opaque
    glClear(GL_COLOR_BUFFER_BIT);         // Effacer le tampon de couleur (arrière-plan)
    box();
    triangle();
    glFlush();  // Rendu maintenant
}

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X