1
0
mirror of https://github.com/LearnOpenGL-CN/LearnOpenGL-CN.git synced 2025-08-24 05:05:29 +08:00
Files
LearnOpenGL-CN/02 Lighting/07 Review.md
Meow J 51cb93e21d 02-02
2015-08-10 04:59:11 +08:00

4.1 KiB
Raw Blame History

复习

原文 | Review ---|--- 作者 | JoeyDeVries 翻译 | Meow J 校对 | Geequlim

恭喜您已经学到了这个地方!不知道你有没有注意到,总体来说我们在学习光照教程的时候学习的除了一些细节(像访问uniform数组)并不是OpenGL本身。

到现在的所有教程都是关于用一些技巧和公式来操作着色器从而达到真实的光照效果。 这同样向你展示了着色器的威力。

着色器是非常灵活的你也亲眼见证了仅仅使用一些3D向量和可配置的变量就能够创造出惊人的图形这一点。

在你学过的最后几个教程中,你学习了有关颜色,冯氏光照模型(包括环境,漫反射,镜面反射光照),对象材质,可配置的光照属性,漫反射和镜面反射贴图,不同种类的光,并且学习了怎样将所有所学知识融合到单独的一个程序里面。

记得去实验不同的光照,材质颜色,光照属性,并且试着使用创造力创建自己的环境。

下一个教程当中,我们将加入更高级的形状到我们的场景中,这些形状将会在我们讨论过的光照模型中非常好看。

词汇表

  • 颜色向量(Color Vector): 一个通过红绿蓝(RGB)分量的组合描绘大部分真实颜色的向量. 一个对象的颜色实际上是该对象不能吸收的反射颜色分量.
  • 冯氏光照模型(Phong Lighting Model): 一个通过计算环境,漫反射,和镜面反射分量的值来估计真实光照的模型.
  • 环境光照(Ambient Lighting): 通过给每个没有被光照的物体很小的亮度,使其不是完全黑暗的,从而对全局光照的估计.
  • 漫反射着色法(Diffuse Shading): 光照随着更多的顶点/片段排列在光源上变强. 该方法使用了法向量来计算角度.
  • 法向量(Normal Vector): 一个垂直于平面的单位向量.
  • 正规矩阵(Normal Matrix): 一个3x3矩阵, 或者说是没有平移的模型(或者模型观察)矩阵.它也被以某种方式修改(逆转置)从而当应用非统一缩放时保持法向量朝向正确的方向. 否则法向量会在使用非统一缩放时失真.
  • 镜面光照(Specular Lighting): (sets a specular highlight the closer the viewer is looking at the reflection of a light source on a surface.待翻译). 根据观察者的方向,光源的方向和设置了高光分散量的反光度值.
  • 冯氏着色法(Phong Shading): 冯氏光照模型应用在片段着色器.
  • 高氏着色法(Gouraud shading): 冯氏光照模型应用在顶点着色器上. 在使用很少树木的顶点时会产生明显的瑕疵. 会得到效率提升但是损失了视觉质量.
  • GLSL结构体(GLSL struct): 一个类似于C的结构体用作着色器变量的容器. 大部分时间用来管理输入/输出/uniform.
  • 材质(Material): 一个物体反射的环境,漫反射,镜面反射光照. 这些东西设定了物体的颜色.
  • 光照(性质)(Light(properties): 一个光的环境,漫反射,镜面反射的强度. 可以应用任何颜色值并对每一个冯氏分量(Phong Component)都定义一个光源闪烁的颜色/强度.
  • 漫反射贴图(Diffuse Map): 一个设定了每个片段中漫反射颜色的纹理图片.
  • 镜面贴图(Specular Map): 一个设定了每一个片段的镜面强度/颜色的纹理贴图. 仅在物体的特定区域允许镜面高光.
  • 平行光(Directional Light): 只有一个方向的光源. 它被建模为不管距离有多长所有光束都是平行而且其方向向量在整个场景中保持不变.
  • 点光源(Point Light): 一个场景中光线逐渐淡出的光源.
  • 衰减(Attenuation): 光减少强度的过程,通常使用在点光源和聚光下.
  • 聚光(Spotlight): 一个被定义为在某一个方向上锥形的光源.
  • 手电筒(Flashlight): 一个摆放在观察者视角的聚光.
  • GLSL uniform数组(GLSL uniform array): 一个数组的uniform值. 就像C语言数组一样工作只是不能被动态调用.