OpenGL-聚光灯-spot

本文详细介绍如何使用OpenGL设置聚光灯效果,包括配置光照模型、定义光源属性、设定材质属性以及启用聚光灯功能等步骤。通过具体的代码示例展示如何实现聚光灯的方向、角度及强度控制。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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);  
}

实例图片:


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值