mirror of
https://github.com/LearnOpenGL-CN/LearnOpenGL-CN.git
synced 2025-08-22 20:25:28 +08:00
02-05 02-07
This commit is contained in:
@@ -70,17 +70,17 @@ glUniform3f(lightDirPos, -0.2f, -1.0f, -0.3f);
|
|||||||
|
|
||||||
方向向量被表示为:vec4(0.2f, 1.0f, 0.3f, 0.0f)。这可以作为简单检查光的类型的方法:你可以检查w元素是否等于1.0,查看我们现在所拥有的光的位置向量,w是否等于0.0,我们有一个光的方向向量,所以根据那个调整计算方法:
|
方向向量被表示为:vec4(0.2f, 1.0f, 0.3f, 0.0f)。这可以作为简单检查光的类型的方法:你可以检查w元素是否等于1.0,查看我们现在所拥有的光的位置向量,w是否等于0.0,我们有一个光的方向向量,所以根据那个调整计算方法:
|
||||||
|
|
||||||
```c++
|
|
||||||
if(lightVector.w == 0.0) // 请留意浮点数错误
|
if(lightVector.w == 0.0) // 请留意浮点数错误
|
||||||
// 执行定向光照计算
|
// 执行定向光照计算
|
||||||
|
|
||||||
else if(lightVector.w == 1.0)
|
else if(lightVector.w == 1.0)
|
||||||
// 像上一个教程一样执行顶点光照计算
|
// 像上一个教程一样执行顶点光照计算
|
||||||
```
|
|
||||||
|
|
||||||
有趣的事实:这就是旧OpenGL(固定函数式)决定一个光源是一个定向光还是位置光源,根据这个修改它的光照。
|
有趣的事实:这就是旧OpenGL(固定函数式)决定一个光源是一个定向光还是位置光源,根据这个修改它的光照。
|
||||||
|
|
||||||
如果你现在编译应用,飞跃场景,它看起来像有一个太阳一样的光源,把光抛到物体身上。你可以看到`diffuse`和`specular`元素都对该光源进行反射了,就像天空上有一个光源吗?看起来就像这样:
|
如果你现在编译应用,并在场景中自由移动,它看起来像有一个太阳一样的光源,把光抛到物体身上。你可以看到`diffuse`和`specular`元素都对该光源进行反射了,就像天空上有一个光源吗?看起来就像这样:
|
||||||
|
|
||||||

|

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