2010-05-26 5 views
0

Pourquoi ne puis-je rien afficher avec ce code?OpenGL Rien ne s'affiche

#include <iostream> 
#include "GL/glfw.h" 
#ifndef MAIN 
#define MAIN 
#include "GL/gl.h" 
#include "GL/glu.h" 
#endif 
using namespace std; 

void display(); 

int main() 
{ 
    int running = GL_TRUE; 
    glfwInit(); 

    if(!glfwOpenWindow(640,480, 0,0,0,0,0,0, GLFW_WINDOW)) 
    { 
     glfwTerminate(); 
     return 0; 
    } 

    while(running) 
    { 
     //GL Code here 
     display(); 

     glfwSwapBuffers(); 
     // Check if ESC key was pressed or window was closed 
     running = !glfwGetKey(GLFW_KEY_ESC) && 
     glfwGetWindowParam(GLFW_OPENED); 
    } 

    glfwTerminate(); 

    return 0; 
} 

void display() 
{ 
    glClearColor(0,0,0,0); 
    glClear(GL_COLOR_BUFFER_BIT); 
    glViewport(0,0,640,480); 
    glMatrixMode(GL_MODELVIEW); 
    glLoadIdentity(); 

    //glTranslatef(0, 0, -2); 
    glBegin(GL_POLYGON); 
     glColor3f(1.0, 0.2, 0.2); 
     glVertex3f(0.25, 0.25, 0.0); 
     glVertex3f(0.75, 0.25, 0.0); 
     glVertex3f(0.75, 0.75, 0.0); 
     glVertex3f(0.25, 0.75, 0.0); 
    glEnd(); 
    glFlush(); 
} 

Répondre

2

Je pense que le problème est que lorsque vous ne spécifiez pas un système de coordonnées par exemple

void glOrtho(GLdouble left, 
      GLdouble right, 
      GLdouble bottom, 
      GLdouble top, 
      GLdouble nearVal, 
      GLdouble farVal); 

ou

void glFrustum(GLdouble left, 
       GLdouble right, 
       GLdouble bottom, 
       GLdouble top, 
       GLdouble nearVal, 
       GLdouble farVal); 

le système de coordonnées par défaut est:

-1, 1, -1, 1, -1, 1

de sorte que le glTranslate déplace l'objet à l'extérieur du système de coordonnées et openGL clips l'objet.

Si vous modifiez l'appel glTranslate() pour traduire par 1.0, l'objet est visible.

0

Vous n'avez pas défini la vue avec glViewport ni la matrice de projection. Si vous changez la couleur claire à quelque chose d'autre que le noir obtenez-vous cette couleur dans votre fenêtre?

Essayez de changer le code à:

void display() 
{ 
    glClearColor(0,0,0,0); 
    glClear(GL_COLOR_BUFFER_BIT); 
    glMatrixMode(GL_PROJECTION); 
    glLoadIdentity(); 
    gluOrtho2D(-1, 1, -1, 1); 
    glMatrixMode(GL_MODELVIEW); 
    glLoadIdentity(); 
    //glTranslatef(0, 0, -2); 
    glBegin(GL_POLYGON); 
     glColor3f(1.0, 0.2, 0.2); 
     glVertex3f(0.25, 0.25, 0.0); 
     glVertex3f(0.75, 0.25, 0.0); 
     glVertex3f(0.75, 0.75, 0.0); 
     glVertex3f(0.25, 0.75, 0.0); 
    glEnd(); 
    glFlush(); 
} 

(La fenêtre peut avoir été réglé correctement lorsque vous avez créé votre fenêtre OpenGL, initialiser sinon avec la largeur de la fenêtre et la hauteur)

désactiver également backface culling Incase votre polygone a enroulement incorrect, glDisable(GL_CULLFACE)

+0

Oui; J'avais l'impression que la fenêtre d'affichage est prise en charge automatiquement. –

+0

Je pense que votre impression est correcte;) Je ne suis pas sûr si cela fait partie de la spécification OpenGL mais au moins sur Windows lorsque vous créez votre contexte de rendu, la fenêtre sera définie pour correspondre à la fenêtre. –

+0

Ce code ne fonctionne pas avec glTranslate. –