更多精彩图形学视频教程,请访问 http://www.oxox.work/
1.创建光源
void glLightfv (GLenum light, GLenum pname, const GLfloat *params);
//创建指定的光源,light可以是GL_LIGHT0、GL_LIGHT1,pname定义的是光源的属性,它指定了一个命名参数。params表示表示pname属性将要被设置的值
pname和params的值
实例
GLfloat light_position[] = { 0, 0, 10, 0.0 }; glEnable(GL_LIGHTING); glEnable(GL_LIGHT0); glLightfv(GL_LIGHT0, GL_POSITION, light_position);
GLfloat light_ambient[] = { 0, 1, 1, 1 };
glEnable(GL_LIGHTING);
glEnable(GL_LIGHT1);
glLightfv(GL_LIGHT1, GL_AMBIENT, light_ambient);//设置光的环境强度
GLfloat light_diffuse[] = { 0, 0, 0, 1 };
glEnable(GL_LIGHTING);
glEnable(GL_LIGHT1);
glLightfv(GL_LIGHT1, GL_DIFFUSE, light_diffuse);//散色光,GL_LIGHT0默认为(1,1,1,1)GL_LIGHT1-7默认为(0, 0, 0, 1)
GLfloat light_diffuse[] = { 1, 1, 1, 0 };
glEnable(GL_LIGHTING);
glEnable(GL_LIGHT1);
glLightfv(GL_LIGHT1, GL_SPECULAR, light_diffuse);//镜面光GL_LIGHT0默认为(1,1,1,1)GL_LIGHT1-7默认为(0, 0, 0, 1
方向性光源:平行的光,如太阳光,不考虑衰减
位置性光源,如台灯,考虑衰减
GLfloat light_position[] = { 1.0, 1.0, 1.0, 1 }; //最后一个参数为0,说明是方向性光源,非0则为位置性光源
GLfloat spot_position[] = { -1.0, -1.0, 0};
glEnable(GL_LIGHTING);
glEnable(GL_LIGHT0);
glLightf(GL_LIGHT0, GL_SPOT_CUTOFF, 45);//设置聚光灯的角度
glLightfv(GL_LIGHT0, GL_SPOT_DIRECTION, spot_position);//指定聚光灯的方向