浅析OpenGL光照
浅析OpenGL光照
之前从来都没有涉及光照的内容,心想只要能通过常规的方法渲染出几何体甚至是模型就可以了,然而没有光照的日子注定是苦涩的,因为仅凭几何体和模型的颜色无法达到真是渲染的效果,在实际中有各种各样的光影响着我们的视觉效果,而OpenGL能够为我们还原现实生活中的光照现象。所以,我还是下决心研究OpenGL的光照了!
为了研究固定管线渲染中光照的部分,我使用Qt和OpenGL技术制作了一个小小的程序,它可以设置光源的各种属性,由此了解光照的原理。
首先呢,在OpenGL中要使用光照,只需简单地添加一句:
- glEnable( GL_LIGHTING );
然后,如果需要添加某个光源,则需要这么写:
- glEnable( GL_LIGHT0 );
当然,在OpenGL固定渲染管线中最多可以添加八个光源,它们的编号分别是GL_LIGHT0到GL_LIGHT7。当然,可以设置每一个光的详细属性,像这样:
- glLightfv( 光源编号, 光源属性, 值 );
- 比如说glLightfv( GL_LIGHT0, GL_DIFFUSE, diffuse );
我写的演示程序包含有许许多多的属性,它们是:
它们其实是来自上述表:
Parameter Name |
Default Value |
Meaning |
GL_AMBIENT |
(0.0, 0.0, 0.0, 1.0) |
ambient RGBA intensity of light |
GL_DIFFUSE |
(1.0, 1.0, 1.0, 1.0) |
diffuse RGBA intensity of light |
GL_SPECULAR |
(1.0, 1.0, 1.0, 1.0) |
specular RGBA intensity of light |
GL_POSITION |
(0.0, 0.0, 1.0, 0.0) |
(x, y, z, w) position of light |
GL_SPOT_DIRECTION |
(0.0, 0.0, -1.0) |
(x, y, z) direction of spotlight |
GL_SPOT_EXPONENT |
0.0 |
spotlight exponent |
GL_SPOT_CUTOFF |
180.0 |
spotlight cutoff angle |
GL_CONSTANT_ATTENUATION |
1.0 |
constant attenuation factor |
GL_LINEAR_ATTENUATION |
0.0 |
linear attenuation factor |
GL_QUADRATIC_ATTENUATION |
0.0 |
quadratic attenuation factor |
通过设置这些属性以获得不同的结果。
1、环境光颜色改变的效果
2、漫反射颜色改变的效果
3、镜面反射颜色改变的效果
4、光源位置和光源方向改变的效果
5、光源衰减指数改变的效果
6、光源半切角改变的效果
7、光源常衰减指数改变的效果
8、光源线性衰减指数改变的效果
9、光源二次衰减指数改变的效果
此外,通过OpenGL设置全局环境光的函数来设置全局光。
glLightModelfv( GL_LIGHT_MODEL_AMBIENT, amb );
比如说在白天烈日暴晒,那么全局光可能就差不多是白色,而在晚上,全局光很微弱,可以近似为黑色。通过设置全局光来模拟场景中的光照基色。
比如下面两张图第一张是全局光RGB(75,75,75),而第二张则是RGB(215,215,215)。
有关颜色追踪
OpenGL为了方便地设置材质的相关属性,推出了颜色追踪的功能。它可以省去诸多glMaterialf(v)函数的调用,直接用glColor类函数代表这些材质即可。比如说
- glEnable( GL_COLOR_MATERIAL );// 开启颜色追踪
- glColorMaterial( GL_FRONT, GL_AMBIENT );// glColor在正面代表其环境材质
- glColor3fv( ambient );// 设定其环境材质
- glColorMaterial( GL_FRONT, GL_SPECULAR );// glColor在正面代表其镜面反射材质
- glColor3fv( specular );// 设定其镜面反射材质
- ……
好了,有关OpenGL光照的研究也该告一段落了,我的演示程序中还有一些其它的功能,比如模型的渲染选项啊,还有设置背景颜色等等。大家都可以尝试体验一下。
演示程序下载地址:
这里 程序源代码下载地址:这里
浅析OpenGL光照的更多相关文章
- OpenGL光照和颜色
OpenGL光照和颜色 转自:http://www.cnblogs.com/kekec/archive/2011/08/16/2140789.html OpenGL场景中模型颜色的产生,大致为如下的流 ...
- OpenGL光照测试
OpenGL光照测试 花了大概半个月,研究了OpenGL的光照.请注意是固定管线渲染的光照,如果使用着色器的高手们请飘过.这个程序是通过光照对模型的照射,来研究OpenGL光照的性质.以后可以通过这个 ...
- OpenGL光照3:光源
本文是个人学习记录,学习建议看教程 https://learnopengl-cn.github.io/ 非常感谢原作者JoeyDeVries和多为中文翻译者提供的优质教程 的内容为插入注释,可以先跳过 ...
- 【狼】openGL 光照的学习
小狼学习原创,欢迎批评指正 http://www.cnblogs.com/zhanlang96/p/3859439.html 先上代码 #include "stdafx.h" #i ...
- OpenGL光照设置
一.设置光源 (1)光源的种类 环境光 环境光是一种无处不在的光.环境光源放出的光线被认为来自任何方向.因此,当你仅为场景指定环境光时,所有的物体无论法向量如何,都将表现为同样的明暗程度. 点光源 由 ...
- 实验7 OpenGL光照
一.实验目的: 了解掌握OpenGL程序的光照与材质,能正确使用光源与材质函数设置所需的绘制效果. 二.实验内容: (1)下载并运行Nate Robin教学程序包中的lightmaterial程序,试 ...
- OpenGL光照2:材质和光照贴图
本文是个人学习记录,学习建议看教程 https://learnopengl-cn.github.io/ 非常感谢原作者JoeyDeVries和多为中文翻译者提供的优质教程 的内容为插入注释,可以先跳过 ...
- OpenGL光照1:颜色和基础光照
本文是个人学习记录,学习建议看教程 https://learnopengl-cn.github.io/ 非常感谢原作者JoeyDeVries和多为中文翻译者提供的优质教程 的内容为插入注释,可以先跳过 ...
- 第07课 OpenGL 光照和键盘(1)
光照和键盘控制: 在这一课里,我们将添加光照和键盘控制,它让程序看起来更美观. 这一课我会教您如何使用三种不同的纹理滤波方式.教您如何使用键盘来移动场景中的对象,还会教您在OpenGL场景中应用简单的 ...
随机推荐
- 读书笔记--C陷阱与缺陷(六)
第六章 1.预处理器:预处理器先对代码进行必要的转换处理,简化编程者的工作. 它的重要原因有以下两点: a. 假如要将程序中出现的所有实例都加以修改,但希望只改动程序一处数值,重新编译实现. 预处理器 ...
- python+selenium第一步 - 环境搭建
刚开始学习一门技术,肯定是要从环境搭建开始的,我也不例外. 首先选择需要安装的版本,我使用的是mac自带的2.7版本. selenium2,和火狐浏览器 为求稳定不会出现未知问题,我选择了seleni ...
- JMeter接口&性能测试
JMeter接口测试 目前最新版本发展到5.0版本,需要Java7以上版本环境,下载解压目录后,进入\apache-jmeter-5.0\bin\,双击ApacheJMeter.jar文件启动JMem ...
- Java 中 日期 时间 加减
DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); //方法1(推荐,功能强大灵活多变) Ca ...
- 20155225 实验三《敏捷开发与XP实践》实验报告
20155225 实验三<敏捷开发与XP实践>实验报告 一.使用工具(Code->Reformate Code)把代码重新格式化 IDEA里的Code菜单有很多实用的功能可以帮助我们 ...
- 使用apt install和使用apt-get install的区别是什么
apt-get是老版的命令,apt是新版的命令,apt还包含了apt-get cache等等,用起来更方便.因为apt刚刚出来,所以允许有apt-get和apt共存,以后apt-get就要淘汰了.
- 基于 SSH 框架的 Criteria 和 DetachedCriteria 多条件查询
Hibernate 定义了 CriteriaSpecification 接口规范用来完成面向对象的条件查询,Criteria 和 DetachedCriteria 就是 CriteriaSpecifi ...
- tp5总结(一)
https://github.com/ABCDdouyaer/tp5-1 1.下载composer 安装框架 也可以安装包或者git安装 composer create-project topthin ...
- 8-15 Shuffle uva12174
题意: 你正在使用的音乐播放器有一个所谓的乱序功能,即随机打乱歌曲的播放顺序.假设一共有s首歌,则一开始会给这s首歌随机排序,全部播放完毕后再重新随机排序.继续播放,依此类推.注意,当s首歌播放完毕之 ...
- sort sign numeric
//JS001 EXEC PGM=SORT //* ...