OpenGL ES 学习教程(七) 事实上并没有所谓的灯光,只是大家都装作发亮
2015-12-11 02:16
337 查看
平时我们习惯于说 “在这里加上一个灯,照亮这个角落”
例如在上面游戏中,可以看到一个路灯,发出柔和的光,照亮了地面和人物。
我们总是误以为,这个灯在发光,但是其实这个灯并不是发光体。
在Unity等游戏引擎中,我们在编辑器里面创建一个灯光,然后在编辑器中能看到一个真实的灯光存在,可以调整位置,调整光的颜色等等。这很容易使用,但是却误导了我。
真实情况是,没有任何物体在发光,所谓的灯光,其实也只是一个普通的物体,只是这个物体(白色立方体)的Color ,会传入到其它的物体(下方棕色立方体)的Fragment Shader中进行颜色混合计算,然后我们就看到:其它物体(下方棕色立方体)的颜色受到了物体(白色立方体) 的颜色的影响,即我们说的 白色立方体 照亮了 下面的棕色立方体 。
后续我们就来模拟一个灯。
这一节首先创建一个场景,场景中包含一个白色的立方体作为灯泡 , 一个黄色的立方体作为灯下的物体。
这里使用了两种Shader,一种是用来模拟灯泡的 GLProgram_Light.h ,另一个模拟灯下面的物体 GLProgram_Cube.h 。
然后在 MyApp.h (Line 29) 中,分别使用两种Shader 绘制了物体和 灯泡,并且给物体设置了 黄色,给灯泡设置了白色。
示例工程下载:
例如在上面游戏中,可以看到一个路灯,发出柔和的光,照亮了地面和人物。
我们总是误以为,这个灯在发光,但是其实这个灯并不是发光体。
在Unity等游戏引擎中,我们在编辑器里面创建一个灯光,然后在编辑器中能看到一个真实的灯光存在,可以调整位置,调整光的颜色等等。这很容易使用,但是却误导了我。
真实情况是,没有任何物体在发光,所谓的灯光,其实也只是一个普通的物体,只是这个物体(白色立方体)的Color ,会传入到其它的物体(下方棕色立方体)的Fragment Shader中进行颜色混合计算,然后我们就看到:其它物体(下方棕色立方体)的颜色受到了物体(白色立方体) 的颜色的影响,即我们说的 白色立方体 照亮了 下面的棕色立方体 。
后续我们就来模拟一个灯。
这一节首先创建一个场景,场景中包含一个白色的立方体作为灯泡 , 一个黄色的立方体作为灯下的物体。
这里使用了两种Shader,一种是用来模拟灯泡的 GLProgram_Light.h ,另一个模拟灯下面的物体 GLProgram_Cube.h 。
然后在 MyApp.h (Line 29) 中,分别使用两种Shader 绘制了物体和 灯泡,并且给物体设置了 黄色,给灯泡设置了白色。
示例工程下载:
http://pan.baidu.com/s/1skjV59b
相关文章推荐
- 每天一个linux命令之coreutils包: [命令
- Linux-CentOS Elasticsearch 安装ik中文分词
- nginx,搭建负载均衡
- Centos (rpm 管理)- ubuntu(dpkg 管理)
- Centos (rpm 管理)- ubuntu(dpkg 管理)
- [蓝牙] 2、蓝牙BLE协议及架构浅析&&基于广播超时待机说广播事件
- Linux-CentOS Elasticsearch Clients客户端集合
- linux 下使用 man 查看 c++ 库函数
- Linux 如何定位占用进程并杀掉占用端口号进程
- sql server 开xp_cmdhshell
- Linux-CentOS 全文搜索引擎Elasticsearch的安装与配置
- CentOS7 root 密码破解
- PopupWindow实现类似美团下拉框
- Linux内核模块自动加载机制
- 每天一点进步:Spark RDD三大特性
- linux ps命令技巧
- eclipse配置Tomcat服务器server locations的方法
- CentOS卸载自带OpenJdk
- linux 进程间通信 pipe
- linux 进程间通信 fifo