灯光 平行光(Directional Light)

Posted thefist11

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了灯光 平行光(Directional Light)相关的知识,希望对你有一定的参考价值。

1.平行光(Directional Light)

定义一个光线方向向量而不是位置向量来模拟一个定向光。着色器的计算基本保持不变,但这次我们将直接使用光的direction向量而不是通过position来计算lightDir向量。

struct Light 
    // vec3 position; // 使用定向光就不再需要了
    vec3 direction;

    vec3 ambient;
    vec3 diffuse;
    vec3 specular;
;
...
void main()

  vec3 lightDir = normalize(-light.direction);
  ...

step2. 定义十个不同的箱子位置,并对每个箱子都生成了一个不同的模型矩阵,每个模型矩阵都包含了对应的局部-世界坐标变换:

for(unsigned int i = 0; i < 10; i++)

    glm::mat4 model;
    model = glm::translate(model, cubePositions[i]);
    float angle = 20.0f * i;
    model = glm::rotate(model, glm::radians(angle), glm::vec3(1.0f, 0.3f, 0.5f));
    lightingShader.setMat4("model", model);

    glDrawArrays(GL_TRIANGLES, 0, 36);

step3. 定义光源的方向(注意我们将方向定义为从光源出发的方向,你可以很容易看到光的方向朝下)。

lightingShader.setVec3("light.direction", -0.2f, -1.0f, -0.3f);


if(lightVector.w == 0.0) // 注意浮点数据类型的误差
  // 执行定向光照计算
else if(lightVector.w == 1.0)
  // 根据光源的位置做光照计算 

以上是关于灯光 平行光(Directional Light)的主要内容,如果未能解决你的问题,请参考以下文章

灯光 平行光(Directional Light)

灯光 平行光(Directional Light)

灯光 平行光(Directional Light)

Unity基础(二)Light灯光系统

Three.js 之灯光

Unity基础(四)Unity灯光