2016-09-28 15 views
-1

enter image description hereProblèmes avec vue sur la caméra et l'éclairage (openGL & GLUT)

Je suis en train de mettre en œuvre le subwindow fond avec trois tores, mais omis d'afficher quoi que ce soit sur le subwindow ..

fonction principale pour subwindow:

instrument_window = glutCreateSubWindow(main_window, GAP, view_height + 3*GAP, 2*(view_width+GAP), INSTRUMENT_HEIGHT); 
glutDisplayFunc(display); 
//lighting 
const GLfloat light_ambient[] = { 0.0f, 0.0f, 0.0f, 1.0f }; 
const GLfloat light_diffuse[] = { 1.0f, 1.0f, 1.0f, 1.0f }; 
const GLfloat light_specular[] = { 1.0f, 1.0f, 1.0f, 1.0f }; 
const GLfloat light_position[] = { 600, 1200, 1200, 0.0f }; 

const GLfloat mat_ambient[] = { 0.7f, 0.7f, 0.7f, 1.0f }; 
const GLfloat mat_diffuse[] = { 0.8f, 0.8f, 0.8f, 1.0f }; 
const GLfloat mat_specular[] = { 1.0f, 1.0f, 1.0f, 1.0f }; 
const GLfloat high_shininess[] = { 100.0f }; 

//glClearColor(0.33,0.33,0.33,0.33); 
glEnable(GL_CULL_FACE); 
glCullFace(GL_BACK); 

glEnable(GL_DEPTH_TEST); 
glDepthFunc(GL_LESS); 

glEnable(GL_LIGHT0); 
glEnable(GL_NORMALIZE); 
glEnable(GL_COLOR_MATERIAL); 
glEnable(GL_LIGHTING); 

glLightfv(GL_LIGHT0, GL_AMBIENT, light_ambient); 
glLightfv(GL_LIGHT0, GL_DIFFUSE, light_diffuse); 
glLightfv(GL_LIGHT0, GL_SPECULAR, light_specular); 
glLightfv(GL_LIGHT0, GL_POSITION, light_position); 

glMaterialfv(GL_FRONT, GL_AMBIENT, mat_ambient); 
glMaterialfv(GL_FRONT, GL_DIFFUSE, mat_diffuse); 
glMaterialfv(GL_FRONT, GL_SPECULAR, mat_specular); 
glMaterialfv(GL_FRONT, GL_SHININESS, high_shininess); 
//end of lighting 

glutMainLoop(); 

pour la fonction d'affichage:

glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); 

float width = 2*(GAP+view_width); 
float height = INSTRUMENT_HEIGHT; 
const float ar = (float) width/(float) height; 

//glViewport(0, 0, width, height); 
glMatrixMode(GL_PROJECTION); 
glLoadIdentity(); 
glFrustum(width/4.0, width*3.0/4.0, height*3.0/4.0, height/4.0, 2.0, 100.0); 
//gluPerspective (160.0, 2*view_width/INSTRUMENT_HEIGHT, 0.1, 1000.0); 

glMatrixMode(GL_MODELVIEW); 
glLoadIdentity() ; 
/* 
glMatrixMode(GL_PROJECTION); 
// Reset transformations 
glLoadIdentity(); 
gluPerspective (160.0, 2*view_width/INSTRUMENT_HEIGHT, 0.1, 1000.0); 
glMatrixMode(GL_MODELVIEW); 
glLoadIdentity(); 

// Draw first 
draw (view_width+GAP-400, INSTRUMENT_HEIGHT/2); 

// Draw second 
draw (view_width+GAP-150, INSTRUMENT_HEIGHT/2); 

// Draw third 
draw (view_width+GAP+100, INSTRUMENT_HEIGHT/2); 

pour dessiner la fonction:

void draw(double cx,double cf) 
glColor3f(0.34f,0.34f,0.34f); 
glPushMatrix(); 
glTranslated(0.0, cx, cy); 
glRotated(-10, 1.0, 0.0, 0.0); 
glutSolidTorus(OUTER_DIAL_RADIUS, OUTER_DIAL_RADIUS+30, 100, 200); 
glPopMatrix(); 
end 

vraiment frustrant car il n'affiche rien et ne sait pas comment déboguer. Tous les indices sont très appréciés !!!!

+0

À l'avenir, ne supprimez pas les questions après leur réponse. C'est une communauté Q & A pour tout le monde actuellement, et surtout pour quiconque dans le futur. – lfgtm

Répondre

0

Pour être honnête, il est difficile de répondre à cette question à partir de l'exemple de code fourni. La moitié de la 'displayFunction' est commentée depuis le /* donc rien en dessous ne sera appelé. Même dans ce cas, il est difficile de déduire le problème car il y a peu de code relatif aux vues multiples ici. Puisque vous utilisez le pipeline fixe GL regardez NeHe qui a un bon tutoriel sur l'utilisation de plusieurs fenêtres.

http://nehe.gamedev.net/tutorial/multiple_viewports/20002/

Debugging est l'outil le plus important développeur a dans son arsenal pour résoudre les problèmes. Il serait sage d'apprendre comment faire cela, car cela vous ferait gagner du temps à long terme et vous trouverez les réponses à la plupart (sinon la totalité) de vos problèmes de codage!

+0

Merci beaucoup! Le problème ici est en fait le paramètre de la perspective. Je suis désolé pour la suppression précédente. Je pensais que ce pourrait être une question en double et je ne savais pas grand-chose sur les règles ici. Je vais essayer de migrer l'ensemble du programme vers la nouvelle version d'openGL. Merci pour le lien que vous fournissez. –