首页 > 其他 > 详细

《高效学习OpenGL》 之 创建光源 glLightfv()

时间:2014-02-19 22:27:44      阅读:379      评论:0      收藏:0      [点我收藏+]

1.创建光源

void glLightfv (GLenum light, GLenum pname, const GLfloat *params);
   //创建指定的光源,light可以是GL_LIGHT0、GL_LIGHT1,pname定义的是光源的属性,它指定了一个命名参数。params表示表示pname属性将要被设置的值
pname和params的值

bubuko.com,布布扣

实例

   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

2.位置和衰减

方向性光源:平行的光,如太阳光,不考虑衰减

位置性光源,如台灯,考虑衰减

GLfloat light_position[] = { 1.0, 1.0, 1.0, 1 }; //最后一个参数为0,说明是方向性光源,非0则为位置性光源


衰减:
注意:环境光, 散射光,镜面光的强度都会衰减;发射光,全局环境光没有衰减

3.聚光灯
   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);//指定聚光灯的方向


《高效学习OpenGL》 之 创建光源 glLightfv()

原文:http://blog.csdn.net/biggbang/article/details/19486411

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!