《The Cg Tutorial》阅读笔记——光照 Lighting
本文为大便一箩筐的原创内容,转载请注明出处,谢谢:http://www.cnblogs.com/dbylk/p/4796306.html
光照 Lighting
一、常见的几种光照模型
二、基本的光照模型
1. 数学公式描述:
表面颜色 = 自发光颜色 + 环境反射颜色 + 漫反射颜色 + 镜面反射(高光)颜色
Surface Color = Emissive Color + Ambient Color + Diffuse Color + Specular Color
2. 自发光 Emissive Term
【释义】“自发光”用于描述物体表面在没有光源的情况下散射出的色彩。具有“自发光”属性的物体不等同于光源,它们不具有照亮场景中其他物体的能力。
【数学表达式】
Emissive = Ke
- Ke是材质的发射属性。
本人博客地址,防止无脑抄袭,影响阅读见谅:http://www.cnblogs.com/dbylk
3. 环境 Ambient Term
【释义】“环境”用于描述场景中四处可见、没有特定方向的入射光在物体表面发生散射产生的色彩。
【数学表达式】
Ambient = Ka * GlobalAmbient
- Ka是材质的环境属性。
- GlobalAmbient是场景中环境光的色彩。
4. 漫反射 Diffuse Term
【释义】“漫反射”用于描述具有特定方向的入射光在物体表面发生散射所产生的色彩。
【数学表达式】
Diffuse = Kd * LightColor * max(N · L, 0)
- Kd是材质的漫射属性。
- LightColor是漫射光的色彩。
- N是物体表面的单位法向量。
- L是由着色点出发,指向光源的单位向量。
5. 镜面反射 Specular Term
【释义】“镜面反射”用于描述具有特定方向的入射光在物体表面发生折射所产生的色彩。镜面光的特点是会随着视点的移动发生改变。
【数学表达式】
Specular = Ks * LightColor * Facing * (max(N · normalize(V + L), 0)Shininess
- Ks是材质的镜面属性。
- LightColor是漫射光的色彩。
- N是物体表面法线的单位向量。
- V是由着色点出发,指向视点的单位向量。
- L是由着色点出发,指向光源的单位向量。
- normalize(V + L)的结果为V与L的中间向量。
- 当N · L大于0时,Facing = 1;否则Facing = 0。
- Shininess定义了材质表面的光泽度,此值越大越不容易发生镜面反射。
《The Cg Tutorial》阅读笔记——光照 Lighting的更多相关文章
- exploit writing tutorial 阅读笔记总结
近日阅读Corelan Team编写的exploit writing tutorial系列,大致了解了一下原理,记了一些笔记.此系列文章有中文翻译版,在看雪论坛上发表. 英文版地址:https://w ...
- 《The Cg Tutorial》阅读笔记——动画 Animation
这段时间阅读了英文版的NVidia官方的<The Cg Tutorial>,借此来学习基本的图形学知识和着色器编程. 在此做一个阅读笔记. 本文为大便一箩筐的原创内容,转载请注明出处,谢谢 ...
- Three.js源码阅读笔记-5
Core::Ray 该类用来表示空间中的“射线”,主要用来进行碰撞检测. THREE.Ray = function ( origin, direction ) { this.origin = ( or ...
- Detectron2源码阅读笔记-(一)Config&Trainer
代码结构概览 核心部分 configs:储存各种网络的yaml配置文件 datasets:存放数据集的地方 detectron2:运行代码的核心组件 tools:提供了运行代码的入口以及一切可视化的代 ...
- 阅读笔记 1 火球 UML大战需求分析
伴随着七天国庆的结束,紧张的学习生活也开始了,首先声明,阅读笔记随着我不断地阅读进度会慢慢更新,而不是一次性的写完,所以会重复的编辑.对于我选的这本 <火球 UML大战需求分析>,首先 ...
- [阅读笔记]Software optimization resources
http://www.agner.org/optimize/#manuals 阅读笔记Optimizing software in C++ 7. The efficiency of differe ...
- 《uml大战需求分析》阅读笔记05
<uml大战需求分析>阅读笔记05 这次我主要阅读了这本书的第九十章,通过看这章的知识了解了不少的知识开发某系统的重要前提是:这个系统有谁在用?这些人通过这个系统能做什么事? 一般搞清楚这 ...
- <<UML大战需求分析>>阅读笔记(2)
<<UML大战需求分析>>阅读笔记(2)> 此次读了uml大战需求分析的第三四章,我发现这本书讲的特别的好,由于这学期正在学习设计模式这本书,这本书就讲究对uml图的利用 ...
- uml大战需求分析阅读笔记01
<<UML大战需求分析>>阅读笔记(1) 刚读了uml大战需求分析的第一二章,读了这些内容之后,令我深有感触.以前学习uml这门课的时候,并没有好好学,那时我认为这门课并没有什 ...
随机推荐
- EJB远程客户端和本地客户端
在客户端中使用企业bean 企业bean的客户端通过依赖注入或JNDI查询的方式获得对企业bean实例的引用. 依赖注入是获得对企业bean实例的引用的最简便的方法. (紧耦合的bean之间相互依赖, ...
- 科班学习java遇到瓶颈,每天云里雾里怎么办?
声明:这个问题困扰了我好久,今天在知乎找到了答案.知乎链接https://www.zhihu.com/question/24240982,感谢大神@Tony He的回答. 作者:Tony He链接:h ...
- C++中的默认成员函数
一般而言,对于一个用户自定义的类类型,以下四个函数在用户没有自定义的情形下,会由编译器自动生成: 1.default constructor 2.copy constructor Someclass: ...
- pkg-config用法和gcc cflags
pkg-config程序是干什么用的?简单的说就是向用户向程序提供相应库的路径.版本号等信息的程序. 譬如说我们运行以下命令:pkg-config 查看gcc的CFLAGS参数 $pkg-confi ...
- day4-迭代器、生成器yield
一.迭代器 迭代器是访问集合元素的一种方式.迭代器对象从集合的第一个元素开始访问,直到所有的元素被访问完结束.迭代器只能往前不会后退,不过这也没什么,因为人们很少在迭代途中往后退.另外,迭代器的一大优 ...
- Java集合(3):Vector && Stack
一.Vector介绍 Vector可以实现可增长的动态对象数组.与数组一样,它包含可以使用整数索引进行访问的组件.不过,Vector的大小是可以增加或者减小的,以便适应创建Vector后进行添加或者删 ...
- [笔记]Go语言实现同一结构体适配多种消息源
问题: 提供天气信息的网站有很多,每家的数据及格式都不同,为了适配各种不同的天气接口,写了如下程序. 代码如下: package main import ( "encoding/json&q ...
- 一行代码实现笔记本跳过微信认证连接WIFI
一行代码实现笔记本跳过微信认证连接WIFI 本文作者原创,没有参考其他文章,方法很简单但是很实用,转载请注明出处,谢谢! 问题 有一些WIFI需要通过微信认证才能连接,手机当然是可以的,但是我们手头的 ...
- day1 python判断输入的密码是否正确
_username = 'leon' _password = 'zyl' username = input("username:") password = input(" ...
- 20165101 实验二 Java面向对象程序设计
20165101 实验二 Java面向对象程序设计