|
/*
* light.c
* This program demonstrates the use of the OpenGL lighting
* model. A sphere is drawn using a grey material characteristic.
* A single light source illuminates the object.
*/
#include <GL/glut.h>
#include <stdlib.h>
/* Initialize material property, light source, lighting model,
* and depth buffer.
*/
void init(void) {
GLfloat mat_specular[]={
1.0, 1.0, 1.0, 1.0
};
GLfloat mat_shininess[]={
50.0
};
GLfloat light_position[]={
1.0, 1.0, 1.0, 0.0
};
glClearColor(0.0,
0.0,
0.0,
0.0);
glShadeModel(GL_SMOOTH);
glMaterialfv(GL_FRONT,
GL_SPECULAR,
mat_specular);
glMaterialfv(GL_FRONT,
GL_SHININESS,
mat_shininess);
glLightfv(GL_LIGHT0,
GL_POSITION,
light_position);
glEnable(GL_LIGHTING);
glEnable(GL_LIGHT0);
glEnable(GL_DEPTH_TEST);
}
void display(void) {
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glutSolidSphere(1.0,
20,
16);
glFlush();
}
void reshape(int w, int h) {
glViewport(0,
0,
(GLsizei)w,
(GLsizei)h);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
if(w <= h)
glOrtho(-1.5,
1.5,
-1.5 *(GLfloat)h/(GLfloat)w,
1.5 *(GLfloat)h/(GLfloat)w,
-10.0, 10.0);
else
glOrtho(-1.5 *(GLfloat)w/(GLfloat)h,
1.5 *(GLfloat)w/(GLfloat)h,
-1.5,
1.5,
-10.0,
10.0);
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
}
void keyboard(unsigned char key, int x, int y) {
switch(key){
case 27:
exit(0);
break;
}
}
int main(int argc, char* argv[]) {
glutInit(&argc,
argv);
glutInitDisplayMode(GLUT_SINGLE | GLUT_RGB | GLUT_DEPTH);
glutInitWindowSize(500,
500);
glutInitWindowPosition(100,
100);
glutCreateWindow(argv[0]);
init();
glutDisplayFunc(display);
glutReshapeFunc(reshape);
glutKeyboardFunc(keyboard);
glutMainLoop();
return 0;
}
|