上述代码中的GL_SPOT_CUTOFF值指定了从聚光灯发射出来的光锥的发散角度。其中,光线是沿光锥边缘的中线发散出来的。对于一种常规的位置光源,这个角度为180度;而对于聚光灯,只有0度到90度的值是有效的。聚光灯发射一个光锥,这个锥体外面的物体并不会被照射到,如图所示:GLfloat lightPos[] = {0.0f, 0.0f, 75.0f, 1.0f};GLfloat ambientLight[] = {0.5f, 0.5f, 0.5f, 1.0f};GLfloat specular[] = {1.0f, 1.0f, 1.0f, 1.0f};GLfloat specref[] = {1.0f, 1.0f, 1.0f, 1.0f};GLfloat spotDir[] = {0.0f, 0.0f, -1.0f};
// 执行场景的初始化设置void SetupRC(){...// 启用光照计算glEnable(GL_LIGHTING);// 设置微弱的环境光,使物体可见glLightModelfv(GL_LIGHT_MODEL_AMBIENT, ambientLight);// 设置光源0的散射光和镜面光成分glLightfv(GL_LIGHT0,GL_DIFFUSE,ambientLight);glLightfv(GL_LIGHT0,GL_SPECULAR,specular);// 设置光源0的位置glLightfv(GL_LIGHT0,GL_POSITION,lightPos);// 设置光源0的聚光灯效果,切角50度glLightf(GL_LIGHT0,GL_SPOT_CUTOFF,50.0f);// 启用光源0glEnable(GL_LIGHT0);// 启用颜色追踪glEnable(GL_COLOR_MATERIAL);// 设置材料属性glColorMaterial(GL_FRONT, GL_AMBIENT_AND_DIFFUSE);// 设置镜面光反射属性及强镜面指数glMaterialfv(GL_FRONT, GL_SPECULAR,specref);glMateriali(GL_FRONT, GL_SHININESS,128);...}
原文地址:http://blog.csdn.net/haohan_meng/article/details/42245799