- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
OpenGL中光照技术研究
OpenGL中光照技术研究
摘 要:光照处理是增强图形真实感的重要组成部分,主要研究了如何在场景中添加OpenGL光照,介绍了添加光照的基本步骤以及实现方法,并对如何设置物体的材质属性作了简要介绍。??
关键词:光照;真实感;OpenGL;材质??
中图分类号:TP311.52 文献标识码:A 文章编号:1672-7800(2011)04-0084-02?お?
??
作者简介:杨键(1981-),男,四川成都人,四川大学锦城学院助教,研究方向为为图形图像处理;张敏(1983-),男,四川成都人,西南民族大学助教,研究方向为嵌入式系统。
0 引言??
当观察一个物体时,所看到的颜色是基于光子的分布而形成的,正是这些光子刺激了人眼圆锥细胞。这些光子可能来自单个光源,也可能来自多个光源。有些光子被表面所吸收,有些光子则被表面所反射。不同的表面所具有的属性不同。物体本身如果是用光滑的材质所组成,在此情况下就会反射更多的光,人的眼睛因此也将接受到更多的光子。如果物体是由粗糙的材质所组成,更多的光子会被其吸收或者被反射出视野之外,因此眼睛就不会接受到很多的光子,物体就会比较暗。??
用OpenGL在模拟光照时,通过将光近似地分解成红、绿和蓝色分量来计算光和光照。也就是说,一个光的颜色由此光中的红、绿和蓝色分量的数量决定。当光照射到一个表面时,OpenGL根据其表面的材质来确定此表面所应该反射的光的红、绿和蓝色分量的百分比数量。??
1 OpenGL中光的类型??
(1)环境光。环境光并不来自任何特定的方向。它来自某个光源,但光线却是在房间或场景中四处反射,没有方向性可言。由环境光所照射的物体在所有方向上的所有表面都是均匀照亮的。??
(2)散射光。散射光来自于一个特定的方向,但它均匀地在一个表面反射开来。虽然光是均匀反射的,但受到光线直接指向的物体表面还是比其它从某个角度受到光线掠过的表面更亮一些。??
(3)镜面光。镜面光也是有方向的,但它的反射角度很锐利,是沿一个特定的方向。高强度镜面光趋向于在它所照射的表面上形成一个亮点。??
(4)发射光。带有发射光的物体看起来就好像自身会发光,只不过这样的光不会对场景中的其它物体产生影响。在OpenGL中,发射光增加了物体的亮度,但是任何光源都不会影响发射光。??
2 OpenGL中添加光照的步骤??
在OpenGL中添加光照需要遵循以下步骤:①为每个物体的每个顶点计算法向量,法线确定了物体相对于光源的指向;②创建、选择并定位所有的光源;③创建并选择一种光照模型;④为场景中的物体定义材质属性。??
3 OpenGL光照的使用??
3.1 创建光源??
创建光源使用glLight *( )函数,该函数最常用的形式为:Void glLightfv(GLenum light,GLenum pname,TYPE *param);??
该函数有3个参数,包含所要为其指定属性的光、所要指定的属性和此属性的值。参数light的值可以是GL_LIGHT0、GL_LIGHT1等,一直到GL_LIGHT7,其指定了将要对那个光源进行设置。Pname参数的取值情况如表1所示。??
3.2 光源的定位??
光源的位置是以GL_POSITION参数和一个4值的矢量(x,y,z,w)来定义的。如果w的值等于0.0,那么(x,y,z)的值就定义了一个矢量,其指定了光线照过来的方向。这样的光源称为定向光源,其所有光线都是平行的,就好像其光源的位置在无穷远。定向光的最普通的实例为太阳,太阳所发出的光到达地球时,其所有光线都几乎是彼此平行的。??
当指定的w值非0时,所定义的就是一个定点光源,对于定点光源,(x,y,z)的值定义了此光源在物体齐次坐标系中的坐标位置。??
3.3 光的衰减??
衰减就是光随着距离光源的距离的增大其强度的减小。对于定点光源,可以通过设置衰减因子达到这样的效果。为一个定向光源设置衰减因子是没有意义的。??
3.4 聚光灯的设置??
当定点光源的辐射面从全方位减小到某一个特定方向时,就会得到一个聚光灯。创建聚光灯,需要设定聚光灯的边界、聚光灯的方向和聚光灯的焦点。在OpenGL中通过GL_SPOT_CUTOFF参数设定聚光灯光照圆锥面与其轴线之间的角度,GL_SPOT_CUTOFF的值的范围是从0°到90°。利用参数GL_SPOT_DIRECTION指定聚光灯的方向;利用参数GL_SPOT_EXPONENT指定聚光灯的焦点,也就是聚光灯在其光柱中的聚光点。从此点到光柱边界,光的强度随之衰减,直至在光柱的边
文档评论(0)