2012-11-11 44 views
0

我想在我的openGL程序中启用照明,我已经为GLUT绘制的对象工作。 但是当我画我的cuuboid照明平面(openGL)

glBegin(5); 
glVertex3f((x_+(b/2)),y_,(z_-(l/2))); 
glVertex3f((x_+(b/2)),y_,(z_+(l/2))); 
glVertex3f((x_-(b/2)),y_,(z_-(l/2))); 
glVertex3f((x_-(b/2)),y_,(z_+(l/2))); 
glVertex3f((x_+(b/2)),y_t,(z_-(l/2))); 
glVertex3f((x_+(b/2)),y_t,(z_+(l/2))); 
glVertex3f((x_-(b/2)),y_t,(z_-(l/2))); 
glVertex3f((x_-(b/2)),y_t,(z_+(l/2))); 
glVertex3f((x_+(b/2)),y_,(z_-(l/2))); 
glVertex3f((x_+(b/2)),y_t,(z_-(l/2))); 
glVertex3f((x_+(b/2)),y_,(z_+(l/2))); 
glVertex3f((x_+(b/2)),y_t,(z_+(l/2))); 
glVertex3f((x_-(b/2)),y_,(z_-(l/2))); 
glVertex3f((x_-(b/2)),y_t,(z_-(l/2))); 
glVertex3f((x_-(b/2)),y_,(z_+(l/2))); 
glVertex3f((x_-(b/2)),y_t,(z_+(l/2))); 
glVertex3f((x_-(b/2)),y_,(z_-(l/2))); 
glVertex3f((x_-(b/2)),y_t,(z_-(l/2))); 
glVertex3f((x_+(b/2)),y_,(z_-(l/2))); 
glVertex3f((x_+(b/2)),y_t,(z_-(l/2))); 
glVertex3f((x_-(b/2)),y_,(z_+(l/2))); 
glVertex3f((x_-(b/2)),y_t,(z_+(l/2))); 
glVertex3f((x_+(b/2)),y_,(z_+(l/2))); 
glVertex3f((x_+(b/2)),y_t,(z_+(l/2))); 
glEnd(); 

glColor3f(6,0,0); 

闪电不会应用在其表面上。 (长方体绘制正确)

我lighning设置是这样的:

glEnable(GL_DEPTH_TEST); 
glEnable(GL_LIGHT0); 
glEnable(GL_NORMALIZE); 
glEnable(GL_COLOR_MATERIAL); 
glEnable(GL_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[] = { 2.0f, 5.0f, 1.0, 1.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 }; 

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); 

没有人知道我的缺陷做?

回答

0

你没有给它任何法线。你需要使用glNormal3f来指定法线。

glBegin(GL_TRIANGLE_STRIP); 
glNormal3f(0,1,0); 
glVertex3f((x_+(b/2)),y_,(z_-(l/2))); 
glVertex3f((x_+(b/2)),y_,(z_+(l/2))); 
glVertex3f((x_-(b/2)),y_,(z_-(l/2))); 
glVertex3f((x_-(b/2)),y_,(z_+(l/2))); 
glNormal3f(-1,0,0); 
// etc. 
+0

所以我用glNormal3f在我画的每架飞机前,像这样: 'glNormal3f(0,1,0); glVertex3f((x_ +(b/2)),y_,(z_-(1/2))); glVertex3f((x_ +(b/2)),y_,(z_ +(1/2))); glVertex3f((x_-(b/2)),y_,(z_-(1/2))); glVertex3f((x_-(b/2)),y _,(z_ +(l/2)));' –

+0

但它没有改变任何东西 –

+0

@AndiFaust:不同的边有不同的法线。 –