网站大量收购闲置独家精品文档,联系QQ:2885784924

光照模型及纹理映射.docVIP

  1. 1、本文档共16页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  5. 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  6. 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  7. 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  8. 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
光照模型及纹理映射

光照模型及纹理映射 基本光照模型 在现实生活中,当光照在非透明物体上时,部分光线被物体吸收,剩余的部分光线被反射。人眼依靠这种反射光来感知物体的形状、颜色和其他细节。从光源投向物体的光称为入射光,从物体表面反射回的光称为反射光。 光照模型概述 当光照射到物体表面上时,将出现3种情况: 光从物体表面反射,形成反射光 光穿透物体,形成透射光 光被物体吸收,转化成为物体的内能 在上述三种情形的光线中,通常只有前2种情形的光线会对人眼产生视觉效果,使人察觉到物体的色彩变化。 OpenGL用一种近似的光照模型模拟现实世界的光照效果。在该模型中,仅当物体表面吸收和反射光线时,光源才会起做作用。每一个物体表面都假定是由某种特性的材料构成的。一种材料可能发出自己的光线,也可能在各个方向上发散一些射入的光线,还有可能像镜子一样在某个方向强烈地反射入射光。 光照分量 在OpenGL的简化光照模型中,将光照分为4个独立的组成部分:辐射光、环境光、漫反射光和镜面反射光。 辐射光 辐射光是直接从物体或光源发出的,不受任何其他光源的影响。 环境光 环境光是这样一种光线,它被环境多次反射,以致于连初始方向也难以确定。这种光线看起来就像来自于所有的方向,当它照在一个物体表面时,它在所有的方向上等量地反射。 漫反射光 在被照射物体表面的反射光中,那些均匀地向各个方向反射出去的光,称为漫反射光,如黑板反射就属于漫反射光 镜面反射光 镜面反射光是指超一定方向的反射光,如点光源照射光滑金属球表面时,会在球表面形成一个特别亮的区域,呈现所谓的高亮(Highlight),这就是光源在该物体表面形成的镜面反射光(Specular Light)。点光源照射表面光滑的物体时,高亮区域小而亮;而点光源照射表面粗糙的物体时,高亮区域大而不亮。 创建光源 光源有许多特性,如颜色、位置、方向等。不同特性的光源,作用在物体上的效果是不一样的。 定义一个简单光源 在OpenGL中,定义一个光源是由函数glLight()来实现的,该函数的原型为:void glLight(GLenum light,GLenum pname); light为一个光源,pname为光源light指定一个单值的光源参数,其取值及其含义如下表所示: pname 功 能 缺 省 值 GL_AMBIENT 环境光分量的强度 (0.0,0.0,0.0,1.0) GL_FIFFUSE 漫反射光分量的强度 (1.0,1.0,1.0,1.0) GL_SPECULAR 镜面反射光分量的强度 (1.0,1.0,1.0,1.0) GL_POSITION 光源位置 (0.0,0.0,0.0,0.0) GL_SPOT_DIRECTION 光源聚光方向 (0.0,0.0,-1.0) GL_SPOT_EXPONENT 光源的聚光指数 0.0 GL_SPOT_CUTOFF 聚光的截至角 180.0 GL_CONSTANT_ATTENUATION 光的常数衰减因子 1.0 GL_LINEAR_ATTENUATION 光的线性衰减因子 0.0 GL_QUADERTIC_ATTENUATION 光的二次衰减因子 0.0 光源的数目与具体的实现的系统有关,但至少支持8个光源。它们用符号名称GL_LIGHTi相互区别,这里0≤i≤GL_MAX_LIGHTS,如GL_LIGHT0,GL_LIGHT1,…GL_LIGHT7等。 以下的代码定义了一个编号为GL_LIGHT0的光源的例子: GLfloat light_ambient[]={0.0,0.0,0.0,1.0}; GLfloat light_diffuse[]={1.0,1.0,1.0,1.0}; GLfloat light_specular[]={1.0,1.0,1.0,1.0}; GLfloat light_position[]={1.0,1.0,1.0,1.0}; glLightfv(GL_LIGHT0,GL_AMBIENT,light_ambient); glLightfv(GL_LIGHT0,GL_DIFFUSE,light_diffuse); glLightfv(GL_LIGHT0,GL_SPECULAR,light_specular); glLightfv(GL_LIGHT0,GL_POSITION,light_position); 光源定义完毕后,必须调用glEnable(GL_LIGHT0)打开该光源,否则该光源对场景中的物体不起作用。 1.3.2 启用光源和激活光源 在OpenGL中,如果需要使用光源,首先必须启用光照。 启动光照的函数为:glEnable(GL_LIGHTING); 取消光照的函数为:glDisable(GL_LIGHTIN

文档评论(0)

panguoxiang + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档