OpenGL--光源

OpenGL至少支持8个光源。要查询OpenGL实现支持的光源数,可调用glGetIntegerv()。

要启用或者禁用光源,分别使用glEnable(GL_LIGHTi)和glDisable(GL_LIGHTi),其中i的可能取值为0到GL_MAX_LIGHTS-1。

创建光源

光源具有颜色、位置和方向等属性。

定义光源的颜色和位置

	GLfloat ambient[] = { 0.2, 0.2, 0.2, 1.0 }; // 环境光
	GLfloat diffuse[] = { 1.0, 1.0, 1.0, 1.0 }; //漫射光
    GLfloat specular[] = { 1.0, 1.0, 1.0, 1.0 };
	GLfloat position[] = { 3.0, 3.0, 2.0, 0.0 };

	glLightfv(GL_LIGHT0, GL_AMBIENT, ambient);
	glLightfv(GL_LIGHT0, GL_DIFFUSE, diffuse);
    glLightfv(GL_LIGHTO, GL_SPECULAR, specular);
	glLightfv(GL_LIGHT0, GL_POSITION, position);

用数组定义参数,并且反复通过 glLightfv()函数设置不同的参数。

GL_AMBIENT光的环境强度(0,0,0,1)

GL_DIFFUSE

光的散射强度 light0的默认值是白色,其他是黑色(1,1,1,1)或(0,0,0,1)
GL_SPECULAR光的镜面强度 light0的默认值是白色,其他是黑色(1,1,1,1)或(0,0,0,1)
GL_POSITION表示光源位置的坐标(x,y,z,w)(0,0,1,0)

GL_AMBIENT参数表示一个特定的光源在场景中所添加的环境光的RGBA强度。

GL_DIFFUSE参数可能最接近于我们想要光的颜色。它定义了特定光源在场景中所添加的散射光的RGBA强度。

GL_SPECULAR参数影响物体上镜面亮点的颜色。如果要创建逼真的效果GL_SPECULAR和GL_DIFFUSE参数设置的值应该相同。

位置和衰减


	GLfloat position[] = { 1.0, 1.0, 1.0, 0.0 };

	glLightfv(GL_LIGHT0, GL_POSITION, position);

GL_POSITION包含四个参数(x,y,z,w)。如果最后一个(w)为0,表示对应光源是方向光源,(x,y,z)描述了它的方向。在默认情况下(0,0,1,0)定义了一个指向z轴负方向的方向性光源。

使用glColor()修改材质参数

当光照被启用opengl使用glMaterialfv()设置当前材质的颜色;如果光照被禁用,则使用

glColor3f()设置当前主颜色。

glMaterialfv(face,pname,TYPE*param)

OpenGL分别为正面和背面图元存储一组材质参数,face指定函数调用将影响那组参数。除非使用双面光照,否则将face设置为GL_FRONT 。pname的合法取值包括GL_AMBIENT、GL_DIFFUSE、GL_SPECULAR

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值