基础光照(Basic Light)

Basic Light

Phong Lighting Model

一个物体所受的光照 = 环境(Ambient) + 漫反射(Diffuse) + 镜面(Specular)

Ambient

把环境光照添加到场景里非常简单。我们用光的颜色乘以一个很小的常量环境因子,再乘以物体的颜色,然后将最终结果作为片段的颜色:

void main()
{
    float ambientStrength = 0.1;
    vec3 ambient = ambientStrength * lightColor;

    vec3 result = ambient * objectColor;
    FragColor = vec4(result, 1.0);
}

Diffuse

//漫反射光
    vec3 norm = normalize(Normal);
    vec3 lightDir = normalize(lightPos - FragPos);
    float dif = max(dot(norm , lightDir) , 0.0f);
    vec3 diffuse = dif * lightColor;

Specular

vec3 viewDir = normalize(viewPos - FragPos);
    vec3 reflectDir = reflect(-lightDir , norm);
    float spec = pow(max(dot(viewDir , reflectDir) , 0.0f) , 32);
    vec3 specular = specularStrength * spec * lightColor;

32 为高光的反光度 越大反射的高光越收缩 反之越分散

将法线从模型空间变换到视觉空间

对于法线是没有其次坐标的 对于法线 为了不改变法线的方向 需要使用特定的法线矩阵将法线从模型空间变换到视觉空间

个人使用OpenGL实现

  • 9
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值