- 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的光照和材质
GL_AMBIENT、GL_DIFFUSE、GL_SPECULAR这三种属性是光源和材质所共有的,如果某光源发出的光线照射到某材质的表面,则最终的漫反射强度由两个GL_DIFFUSE属性共同决定,最终的镜面反射强度由两个GL_SPECULAR属性共同决定。
在OpenGL中,仅仅支持有限数量的光源。使用GL_LIGHT0表示第0号光源,GL_LIGHT1表示第1号光源,依次类推,OpenGL至少会支持8个光源,即GL_LIGHT0到GL_LIGHT7。使用glEnable函数可以开启它们。例如,glEnable(GL_LIGHT0)可以开启第0号光源。使用glDisable函数则可以关闭光源。一些OpenGL实现可能支持更多数量的光源,但总的来说,开启过多的光源将会导致程序运行速度的严重下降,
光源GL_LIGHT0与其他几个光源不同,
GL_DIFFUSE,GL_SPECULAR的默认值是(1.0,1.0,1.0,1.0)
而其他光源的默认值是 (0.0,0.0,0.0,1.0)。
使用OpenGL的光照模型包括以下几个步骤:
1 设置光源的种类、位置和方向(对于平行光源)
2 为每个图元的每个顶点指定它的法线向量
3 为各个图元指定它的材质
4 启用光照模型
OpenGL的光照和材质
1 光源设置:
设置环境光:glLightfv(GL_LIGHT0,GL_AMBIENT,ambientLight);
设置漫射光成分:glLightfv(GL_LIGHT0,GL_DIFFUSE,DiffuseLight)
设置镜面光成分:glLightfv(GL_LIGHT0,GL_SPECULAR,SpecularLight);
光源的属性GL_SPECULAR影响镜面反射区域的颜色,一般物体的镜面反射区域的颜色为入射光线的颜色,要实现真实感,应该将它的值设置成与GL_DIFFUSE相同。
设置光源的位置:glLightfv(GL_LIGHT0, GL_POSITION, sun_light_position);
GL_POSITION属性,表示光源所在的位置。由四个值(X, Y, Z, W)表示。
方向性光源 第四个值W为零,则表示该光源位于无限远处,前三个值表示了它所在的方向。通常,太阳可以近似的被认为是方向性光源。
位置性光源 第四个值W不为零,则X/W, Y/W, Z/W表示了光源的位置。这种光源称为位置性光源。
定位光源需要对其发射的光进行衰减,可以设置各种衰减因子。环境光,散射光和镜面反射光的贡献都是衰减的,只有发射光和全局环境光不会衰减。
OpenGL的光照和材质
下面定义了一个位置在(1,1,1),没有环境光,镜面反射光和漫反射光都为白光的光源:
GLfloat light_position[] = { 1.0, 1.0, 1.0, 0.0 };
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 };
glLightfv(GL_LIGHT0, GL_POSITION, light_position);
glLightfv(GL_LIGHT0, GL_AMBIENT , light_ambient );
glLightfv(GL_LIGHT0, GL_DIFFUSE , light_diffuse );
glLightfv(GL_LIGHT0, GL_SPECULAR, light_specular);
OpenGL的光照和材质
2 创建聚光灯(这些属性只对位置性光源有效)
glLightf(GL_LIGHT0,GL_SPOT_CUTOFF,LightCutOff);
表示将光源作为聚光灯使用。很多光源都是向四面八方发射光线,但有时候一些光源则是只向某个方向发射,比如手电筒,只向一个较小的角度发射光线。
GL_SPOT_DIRECTION 属性有三个值,表示一个向量,即光源发射的方向。光源的默认方向是(0.0,0.0,-1.0),即指向z轴负方向
GL_SPOT_EXPONENT 属性只有一个值,表示聚光的程度,为零时表示光照范围内向各方向发射的光线强度相同,为正数时表示光照向中央集中,正对发射方向的位置受到更多光照,其它位置受到较少光照。数值越大,聚光效果就越明显。
GL_SPOT_CUTOFF 属性也只有一个值,表示一个角度,它是光源发射光线所覆盖角度的一半,其取值范围在0到90之间,也可以取180这个特殊值。取值为180时表示光源发射光线覆盖36
您可能关注的文档
最近下载
- Slide劳里埃大学WilfridLaurierUniversity加拿大留学.ppt VIP
- SEMI-F047-000-0706-en电压暂升暂降标准.pdf VIP
- [内蒙古]商业装饰工程监理规划124页(含装修、消防、弱电等)serfrz.doc VIP
- 2019年高考语文试卷(上海)(春考)(解析卷).pdf VIP
- 第9课 数据传输有新意 义务教育版信息科技七年级.docx VIP
- 张家口煤机630-264刮板输送机使用说明书.pdf VIP
- 通达信指标公式源码 领航主图指标.doc VIP
- 燃气管线施工图设计说明.doc
- 2020年高考语文试卷(上海)(春考)(解析卷).pdf VIP
- 高压断路器检修规程.doc VIP
文档评论(0)