OpenGL学习笔记

【四十八,投光物-01定向光】

2019-12-18  本文已影响0人  Woodlouse

投光物

投光 : 光源把光照射到物体上;

定向光

当光源被设置为无限远时,它被称为定向光(Directional Light),因为所有的光线都有着同一个方向,独立于光源位置。

我们最常见的定向光源的例子是:太阳,来自于太阳的所有光线都被定义为平行光:


定向光示意图

所有的光线都是平行的,对于场景中的每个物体光的方向都保持一致,物体和光源的位置保持怎样的关系都无所谓。由于光的方向向量保持一致,光照计算会和场景中的其他物体相似。

开发

  1. 修改片段着色器中光源的定义,去除光的位置定义,加入方向的定义,如下:
struct Light
{
//    vec3 position;
    
    vec3 direction;
    
    vec3 ambient;
    vec3 diffuse;
    vec3 specular;
};
uniform Light light;
  1. 将光方向标准化
vec3 lightDir = normalize(-light.direction);
  1. 设置光的方向
//设置定向光的属性
m_pShader->setVec3("light.direction", -0.2f, -1.0f, -0.3f);
  1. 添加多个物体
for(int i=0; i<10; i++) {
        glm::mat4 model = glm::mat4(1.0f);
        model = glm::translate(model, cubePositions[i]);
        model = glm::rotate(model, glm::radians(20.0f *float(glfwGetTime())), glm::vec3(1.0f, 0.3f, 0.5f));
        model = glm::scale(model, glm::vec3(0.5f));
        m_pShader->setMat4("model", model);
        
        glDrawArrays(GL_TRIANGLES, 0, 36);
    }
  1. 运行效果


    定向光效果图

定向光代码

上一篇 下一篇

猜你喜欢

热点阅读