Aquacolor

Aquacolor



LearningOpenGL【12】

Gumdrop · 2025-09-07 · 8浏览 · 未分类


光源携带不同属性成为不同种类的光源。这里举出一些常用光源的模型。

点光源PointLight

原本使用的光源就是点光源。

struct Light{
    vec3 position;
    vec3 ambient;
    vec3 diffuse;
    vec3 specular;
};

光照随距离衰减Attenuation

认为强度与距离二次方成反比,于是模型为:

$$ Attenuation = 1/P_2(distance)=1/(constant+linear*d+quadratic*d*d) $$
struct AttenuatedPointLight{
    vec3 position;
    vec3 ambient;
    vec3 diffuse;
    vec3 specular;
    vec3 coeffient;
};

锥形光SpotLight

用一个cutOff属性和在shader中使用if语句,判断片段是否被照射了,应该渲染diffuse和specular。

当连接光源和片段的向量与锥形方向向量夹角过大时舍去。

struct SpotLight{
    vec3 position;
    vec3 direction;
    vec3 ambient;
    vec3 diffuse;
    vec3 specular;
    float cutOff;
};

2025-09-07T08:29:06.png

柔化边缘SmoothEdge

边缘定义为cutOff($\phi$)和outerCutOff($\gamma$)之间的部分,这里使用了简单的线性插值递减。其他方式当然也可以。

$$ intensity(\theta) = (\theta-\gamma)/(\phi-\gamma) $$
struct SmoothlyEdgedSpotLight{
    vec3 position;
    vec3 direction;
    vec3 ambient;
    vec3 diffuse;
    vec3 specular;
    float cutOff;
    float outerCutOff;
};

2025-09-07T08:29:21.png

平行光DirectionalLight

没有位置只有方向。

struct DirectionalLight{
    vec3 direction;
    vec3 ambient;
    vec3 diffuse;
    vec3 specular;
};




comment 评论区

添加新评论





  • ©2025 bilibili.com

textsms
内容不能为空
account_circle
昵称不能为空
email
邮件地址格式错误
web
beach_access
验证码不能为空
keyboard发表评论


star_outline 咱快来抢个沙发吧!




©2025 Aquacolor

鄂ICP备2024059763号-1

鄂公网安备42011102005556号



Theme Romanticism2.1 by Akashi
Powered by Typecho