OpenGL光照

1.不同光源分类
1.1环境光(Ambient light):天空
1.2方向光(Directional light):太阳、月亮
1.3点光(Point light):灯泡、蜡烛
1.4聚光(Spot light):手电筒、聚光灯
2.光线反射方式
2.1漫反射(Diffuse reflection):光线反射方向平等向不同方向蔓延,地毯
2.2镜面反射(Specular reflection):光线反射方向在某一特定方向强烈,光滑金属、刚打过蜡的汽车
有些材质在不同环境下具备以上两方面光线反射
3.朗伯体反射实现方向光(heightmap_vertex_shader.glsl)

//materialColor:材质颜色
//0.3:光亮度
vec3 getDirectionalLighting()
{   
    return materialColor * 0.3 
         * max(dot(eyeSpaceNormal, u_VectorToLight), 0.0);       
}

4.表面法线(suface normal)
4.1表面法线是应用于表面的而不是点,在计算每个点的法线时,把这个点的邻接点合并在一起创建一个平面。该平面往表面的法向量即为表面法线。
这里写图片描述
4.2计算方式
首先,获取其邻接点;然后,用这些点创建代表其平面的两个向量(从右到左、从上到下);最后,采用这两个向量的叉积,并把它归一化得到其表面法线。
5.朗伯体反射实现漫反射(heightmap_vertex_shader.glsl)

//漫反射
//scaledNormal:地面的表面法线
float diffuse = max(dot(scaledNormal, u_VectorToLight), 0.0);
diffuse *= 0.3;
v_Color *= diffuse;  

6.关联着色器程序
7.添加方向光的光向量(ParticlesRenderer)
8.添加点光源位置、颜色(ParticlesRenderer)
9.计算摄像头位置、向量(heightmap_vertex_shader.glsl)
10.综合光照影响(heightmap_vertex_shader.glsl)

v_Color = getAmbientLighting();//环境光
v_Color += getDirectionalLighting();//方向光
v_Color += getPointLighting();//点光源

11.源码:https://github.com/HQlin/Lighting/commits/master

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值