#include <gl/glut.h>
#define WIDTH 400
#define HEIGHT 400
static GLfloat angle = 0.0f;
void myDisplay(void)
{
glClearColor(0,1,1,0);//背景颜色
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
// 定义太阳光源,它是一种白色的光源
{
//光源light0
GLfloat mat_specular[]={1.0,1.0,1.0,1.0};
GLfloat mat_shininess[]={128.0};
GLfloat light_position[]={0.6,0.6,-0.6,0.0};//表示光源为点坐标x,y,z >0表示左上里
GLfloat white_light[]={1.0,1.0,1.0,1.0}; //光源的颜色
GLfloat lmodel_ambient[]={0.2,0.2,0.2,1.0};//微弱环境光,使物体可见
glClearColor(0.0,0.0,0.0,1.0);
glShadeModel(GL_SMOOTH);//GL_SMOOTH
//glColorMaterial(GL_FRONT, GL_AMBIENT_AND_DIFFUSE);
glMaterialfv(GL_FRONT,GL_SPECULAR,mat_specular);//指定当前材质属性镜面反射颜色
glMaterialfv(GL_FRONT,GL_SHININESS,mat_shininess); //镜面反射指数
glLightfv(GL_LIGHT0,GL_POSITION,light_position);//光源编号,光源特性,参数数据
glLightfv(GL_LIGHT0,GL_DIFFUSE,white_light);
glLightfv(GL_LIGHT0,GL_SPECULAR,white_light);
glLightModelfv(GL_LIGHT_MODEL_AMBIENT,lmodel_ambient); //指定全局的环境光,物体才能可见
glEnable(GL_LIGHTING);
glEnable(GL_LIGHT0);
glEnable(GL_DEPTH_TEST);
}
glutSolidSphere(0.8,300,16);//半径,南北经线,纬线
glutSwapBuffers();//双缓冲用
}
int main(int argc, char* argv[])
{
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_RGBA | GLUT_DOUBLE);
glutInitWindowPosition(200, 200);
glutInitWindowSize(WIDTH, HEIGHT);
glutCreateWindow("OpenGL光照演示");
glutDisplayFunc(&myDisplay);
glutMainLoop();
return 0;
}
结果: