2009-12-28 4 views
2

Je faisais mon programme OpenGL et il se trouve que j'ai un problème, pouvez-vous trouver quel est le problème?en utilisant gluPerspective dans OpenGL

Il fait pivoter un plan avec l'axe y comme centre lorsque j'utilise glOrtho il fonctionne bien, mais gluPerspective il ne fonctionne pas.

Il y a un problème avec le gluPerspective parce que quand je change l'angle à 0 je peux juste voir quelque chose mais pas le tout. Mais quand je le change en 45. Rien ne s'affiche à l'écran et je ne comprends pas les valeurs proches et lointaines.

#include iostream 
#include "Xlib.h" 
#include "gl.h" 
#include "glu.h" 
#include "glut.h" 
#include math.h 
void setupRC() 
{ 
    glClearColor(1,0,0,1); 
    glColor3f(0,0,0); 
} 
void timerfunc(int value) 
{ 
    glutPostRedisplay(); 
    glutTimerFunc(1, timerfunc ,1); 
} 
void RenderScene() 
{ 
    glColor3f(0,0,0); 
    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); 
    static GLfloat rot = 0.0f,x =0.0f , y=1.0f , z=0.0f; 
    rot++; 
    glPushMatrix(); 

    glRotatef(rot,0.0,1.0,0.0); 
    glBegin(GL_POLYGON); 
     glVertex3i(1,-1,0); 
     glVertex3i(1,1,0); 
     glVertex3i(-1,1,0); 
     glVertex3i(-1,-1,0); 
     glVertex3i(1,-1,0); 

    glEnd(); 
    glPopMatrix(); 
    if (rot == 360) 
     rot = 0; 
    glutSwapBuffers(); 
} 
void ChangeSize(GLint w, GLint h) 
{ 
    if(h==0) 
     h = 1; 
    GLfloat aspectratio = (GLfloat)w/(GLfloat)h; 

    glViewport(0,0,w,h); 
    glMatrixMode(GL_PROJECTION); 
    glLoadIdentity(); 
    gluPerspective(45.0f, aspectratio, 1,1000); 
    /*if(w <= h) 
     glOrtho(-100,100,-100/aspectratio, 100/aspectratio, 1,-1); 
    else 
     glOrtho(-100*aspectratio, 100*aspectratio , -100,100,1,-1);*/ 
    glMatrixMode(GL_MODELVIEW); 
    glLoadIdentity(); 

} 

int main(int argc , char **argv) 
{ 
    glutInit(&argc, argv); 
    glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGB); 
    glutInitWindowSize(800,600); 
    glutInitWindowPosition(0,0); 
    glutCreateWindow("chelsea"); 
    glutTimerFunc(1, timerfunc , 1); 
    setupRC(); 
    glutDisplayFunc(RenderScene); 
    glutReshapeFunc(ChangeSize); 
    glutMainLoop(); 

    return 0; 
} 
+0

créer peut-être un titre plus descriptif? – torger

+1

L'utilisation de mots complets et de signes de ponctuation facilite la lecture de votre question et donc, plus facilement, d'obtenir une réponse. – Nifle

+0

oh k. Nous verrons cela. Merci pour les commentaires – yuneek

Répondre

9

problème est la suivante: votre polygone et votre appareil photo sont les mêmes coordonnées. (Le polygone est pas devant de la caméra, il est sur il.)

  1. Lorsque le polygone se trouve dans sa position initiale, il est aligné exactement avec l'appareil qui ne peut pas voir;
  2. lorsqu'il commence à tourner, une partie de celui-ci passe devant la caméra, mais elle est trop proche pour être affichée.

Cependant, le réglage de la fovy à 0 ° lors de la construction de votre matrice en perspective donne une (vraiment) caméra grand angle, qui est capable de voir (vraiment) les objets proches - expliquant pourquoi vous pouvez voir quelque chose « , mais pas le tout".

Si vous voulez être en mesure de voir « la chose » avec fovy=45, déplacez votre polygone de la caméra en appliquant une translation négative le long de l'axe Z:

void RenderScene() 
{ 
    ... 
    glPushMatrix(); 
    glTranslatef(0.,0.,-10.); // Move away from camera 
    glRotatef(rot,0.0,1.0,0.0); 
    glBegin(GL_POLYGON); 
     ... 
    glEnd(); 
    glPopMatrix(); 
    ... 
} 
+0

Hey merci beaucoup beaucoup Maintenant, je comprends tout et c'est une aide réelle. Merci beaucoup – yuneek