本文为大便一箩筐的原创内容,转载请注明出处,谢谢: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的更多相关文章

  1. exploit writing tutorial 阅读笔记总结

    近日阅读Corelan Team编写的exploit writing tutorial系列,大致了解了一下原理,记了一些笔记.此系列文章有中文翻译版,在看雪论坛上发表. 英文版地址:https://w ...

  2. 《The Cg Tutorial》阅读笔记——动画 Animation

    这段时间阅读了英文版的NVidia官方的<The Cg Tutorial>,借此来学习基本的图形学知识和着色器编程. 在此做一个阅读笔记. 本文为大便一箩筐的原创内容,转载请注明出处,谢谢 ...

  3. Three.js源码阅读笔记-5

    Core::Ray 该类用来表示空间中的“射线”,主要用来进行碰撞检测. THREE.Ray = function ( origin, direction ) { this.origin = ( or ...

  4. Detectron2源码阅读笔记-(一)Config&Trainer

    代码结构概览 核心部分 configs:储存各种网络的yaml配置文件 datasets:存放数据集的地方 detectron2:运行代码的核心组件 tools:提供了运行代码的入口以及一切可视化的代 ...

  5. 阅读笔记 1 火球 UML大战需求分析

    伴随着七天国庆的结束,紧张的学习生活也开始了,首先声明,阅读笔记随着我不断地阅读进度会慢慢更新,而不是一次性的写完,所以会重复的编辑.对于我选的这本   <火球 UML大战需求分析>,首先 ...

  6. [阅读笔记]Software optimization resources

    http://www.agner.org/optimize/#manuals 阅读笔记Optimizing software in C++   7. The efficiency of differe ...

  7. 《uml大战需求分析》阅读笔记05

    <uml大战需求分析>阅读笔记05 这次我主要阅读了这本书的第九十章,通过看这章的知识了解了不少的知识开发某系统的重要前提是:这个系统有谁在用?这些人通过这个系统能做什么事? 一般搞清楚这 ...

  8. <<UML大战需求分析>>阅读笔记(2)

    <<UML大战需求分析>>阅读笔记(2)> 此次读了uml大战需求分析的第三四章,我发现这本书讲的特别的好,由于这学期正在学习设计模式这本书,这本书就讲究对uml图的利用 ...

  9. uml大战需求分析阅读笔记01

    <<UML大战需求分析>>阅读笔记(1) 刚读了uml大战需求分析的第一二章,读了这些内容之后,令我深有感触.以前学习uml这门课的时候,并没有好好学,那时我认为这门课并没有什 ...

随机推荐

  1. reload函数

    reload函数 python2中reload()是内置函数,可以直接调用: reload() python3中将reload()函数放到了imp包中,需要先引入imp包: from imp impo ...

  2. Web框架简介

    Web框架本质 众所周知,对于所有的Web应用,本质上其实就是一个socket服务端,用户的浏览器其实就是一个socket客户端. ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 ...

  3. python 课堂笔记-while

    #Author:zyl age_of_oldboy = 56 count = 0 while count < 3: guess_age = int(input("guess age:& ...

  4. iOS clang 编译 oc 代码

    clang -x objective-c -rewrite-objc -isysroot /Applications/Xcode.app/Contents/Developer/Platforms/iP ...

  5. hadoop28---netty传对象

    Netty中,通讯的双方建立连接后,会把数据按照ByteBuf的方式进行传输,例如http协议中,就是通过HttpRequestDecoder对ByteBuf数据流进行处理,转换成http的对象.基于 ...

  6. CentOS6升级Apache-httpd2.4.29

    本文档解决AppacheHttp由版本2.2.x升级到版本2.4.29的问题,安装需要先进行依赖软件包的安装,请检查相应依赖软件包安装情况,如系统已经正确安装相应依赖软件包,可略过,本文所述版本升级不 ...

  7. H5中的语义化标签

    H5中的语义化标签也就是之前的id = “header”演变而来的 只不过之前是id 现在变成了标签而已 什么是语义化: 根据内容结构化(内容语义化) 选择合适的标签(代码语义化) 便于开发者阅读和写 ...

  8. Spark1.x和2.x如何读取和写入csv文件

    看很多资料,很少有讲怎么去操作读写csv文件的,我也查了一些.很多博客都是很老的方法,还有好多转来转去的,复制粘贴都不能看.下面我在这里归纳一下,以免以后用到时再费时间去查.前端实现文件下载和拖拽上传 ...

  9. Linux下解压分包文件zip(zip/z01/z02)【转】

    本文转载自:https://www.cnblogs.com/EasonJim/p/7227109.html?utm_source=itdadao&utm_medium=referral Lin ...

  10. 2-Color Dutch National Flag Problem

    2-Color Dutch National Flag Problem 问题 a[0..n-1]中包含红元素或蓝元素;重新放置使得 红元素均在蓝元素之前. 循环不变式 每一次循环,a[0...k-1] ...