OpenGL-聚光灯-spot
2017-07-22 15:02
218 查看
4.聚光灯
4.1 glLightModelfv()光照模型
GLfloat lmodel_ambient[]={0.2,0.2,0.2,1.0};//微弱环境光,使物体可见
glLightModelfv(GL_LIGHT_MODEL_AMBIENT,lmodel_ambient);
4.2 光源属性参数
GLfloat light1_position[]={1.0,1.0,5.0,1.0};
GLfloat light1_diffuse[]={1.0,1.0,1.0,1.0};
GLfloat light1_specular[]={1.0,1.0,1.0,1.0};
glLightfv(GL_LIGHT1,GL_DIFFUSE,light1_diffuse);
glLightfv(GL_LIGHT1,GL_SPECULAR,light1_specular);
glLightfv(GL_LIGHT1,GL_POSITION,light1_position);
4.3 材质属性参数
GLfloat mat_specular[]={1.0,1.0,1.0,1.0};
GLfloat mat_shininess[]={128.0};
glMaterialfv(GL_FRONT,GL_SPECULAR,mat_specular); //指定当前材质属性 镜面反射颜色
glMaterialfv(GL_FRONT,GL_SHININESS,mat_shininess); //镜面反射指数
4.4 开启聚光灯功能
glEnable(GL_LIGHTING);
glEnable(GL_LIGHT1);
代码示例:
void init()
{
GLfloat mat_specular[]={1.0,1.0,1.0,1.0};
GLfloat mat_shininess[]={128.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
//聚光灯light1
GLfloat light1_position[]={1.0,1.0,5.0,1.0};
GLfloat spot_direction[]={0.0,0.0,-1.0};
GLfloat light1_diffuse[]={1.0,1.0,1.0,1.0};
GLfloat light1_specular[]={1.0,1.0,1.0,1.0};
GLfloat light1_ambient[]={0.2,0.2,0.2,1.0};
glLightfv(GL_LIGHT1,GL_AMBIENT,light1_ambient);
glLightfv(GL_LIGHT1,GL_DIFFUSE,light1_diffuse);
glLightfv(GL_LIGHT1,GL_SPECULAR,light1_specular);
glLightfv(GL_LIGHT1,GL_POSITION,light1_position);
glLightModelfv(GL_LIGHT_MODEL_AMBIENT,lmodel_ambient);
glMaterialfv(GL_FRONT,GL_SPECULAR,mat_specular); //指定当前材质属性 镜面反射颜色
glMaterialfv(GL_FRONT,GL_SHININESS,mat_shininess); //镜面反射指数
glLightf(GL_LIGHT1,GL_SPOT_CUTOFF,50.0);//角度
glLightfv(GL_LIGHT1,GL_SPOT_DIRECTION,spot_direction);//方向
glLightf(GL_LIGHT1,GL_SPOT_EXPONENT,2.0);//*/
glEnable(GL_LIGHTING);
glEnable(GL_LIGHT1);
glEnable(GL_DEPTH_TEST);
}
实例图片:
4.1 glLightModelfv()光照模型
GLfloat lmodel_ambient[]={0.2,0.2,0.2,1.0};//微弱环境光,使物体可见
glLightModelfv(GL_LIGHT_MODEL_AMBIENT,lmodel_ambient);
4.2 光源属性参数
GLfloat light1_position[]={1.0,1.0,5.0,1.0};
GLfloat light1_diffuse[]={1.0,1.0,1.0,1.0};
GLfloat light1_specular[]={1.0,1.0,1.0,1.0};
glLightfv(GL_LIGHT1,GL_DIFFUSE,light1_diffuse);
glLightfv(GL_LIGHT1,GL_SPECULAR,light1_specular);
glLightfv(GL_LIGHT1,GL_POSITION,light1_position);
4.3 材质属性参数
GLfloat mat_specular[]={1.0,1.0,1.0,1.0};
GLfloat mat_shininess[]={128.0};
glMaterialfv(GL_FRONT,GL_SPECULAR,mat_specular); //指定当前材质属性 镜面反射颜色
glMaterialfv(GL_FRONT,GL_SHININESS,mat_shininess); //镜面反射指数
4.4 开启聚光灯功能
glEnable(GL_LIGHTING);
glEnable(GL_LIGHT1);
代码示例:
void init()
{
GLfloat mat_specular[]={1.0,1.0,1.0,1.0};
GLfloat mat_shininess[]={128.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
//聚光灯light1
GLfloat light1_position[]={1.0,1.0,5.0,1.0};
GLfloat spot_direction[]={0.0,0.0,-1.0};
GLfloat light1_diffuse[]={1.0,1.0,1.0,1.0};
GLfloat light1_specular[]={1.0,1.0,1.0,1.0};
GLfloat light1_ambient[]={0.2,0.2,0.2,1.0};
glLightfv(GL_LIGHT1,GL_AMBIENT,light1_ambient);
glLightfv(GL_LIGHT1,GL_DIFFUSE,light1_diffuse);
glLightfv(GL_LIGHT1,GL_SPECULAR,light1_specular);
glLightfv(GL_LIGHT1,GL_POSITION,light1_position);
glLightModelfv(GL_LIGHT_MODEL_AMBIENT,lmodel_ambient);
glMaterialfv(GL_FRONT,GL_SPECULAR,mat_specular); //指定当前材质属性 镜面反射颜色
glMaterialfv(GL_FRONT,GL_SHININESS,mat_shininess); //镜面反射指数
glLightf(GL_LIGHT1,GL_SPOT_CUTOFF,50.0);//角度
glLightfv(GL_LIGHT1,GL_SPOT_DIRECTION,spot_direction);//方向
glLightf(GL_LIGHT1,GL_SPOT_EXPONENT,2.0);//*/
glEnable(GL_LIGHTING);
glEnable(GL_LIGHT1);
glEnable(GL_DEPTH_TEST);
}
实例图片:
相关文章推荐
- opengl 教程(21) 聚光灯
- GLSL per-pixel lighting + spot texture (聚光灯贴图)
- opengl 教程(21) 聚光灯
- unity里面聚光灯(SPOT)光照计算学习!
- OpenGL(十二) 光源类型 平行光 、 点光源 、 聚光灯 的实现
- opengl光照之聚光灯软化边缘
- opengl对三种光源(方向光,点光源,聚光灯)进行特写并分屏渲染
- 现代OpenGL+Qt学习笔记之十二:模拟聚光灯
- OpenGL中创建聚光灯的效果
- opengl光照之聚光灯
- OpenGL教程翻译 第二十一课 聚光灯
- 打开OPENGL真的能提高魔兽争霸III/魔兽世界的速度吗?(文字只显示一半,卡之类问题)
- [OpenGL]课后案例08:选择模式拾取程序
- 笔记:OpenGL SuperBible - overview
- VS2013配置OpenGL
- windows下安装opengl的glut库(转)
- opengl配置
- openGL 键盘,鼠标响应事件应用
- Qt使用opengl报错 解决方法
- 在 OpenGL 的显示窗口中截图