GLSL光照运用

本文介绍了在GLSL中实现光照效果的方法,包括通过计算顶点法线向量与光照向量的点积来确定光照强度,以及在顶点和片段着色器中处理漫射光和镜面光的步骤。示例代码展示了如何根据光强设置不同颜色,并通过反射向量计算镜面光强度。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1、在GLSL中运用光照,首先需考虑的是光照强度,有了光强,有就明暗和层次感,那么光照强度如何判断?我们可以通过计算顶点的法线向量与光照向量的夹角余弦值(cosine)来得到。所以,当法线离光照方向很接近的情况下,将会出现亮的色调;当光照方向与法线方向的夹角很大时,渲染的地方就会很暗,换句话而言就是,夹角的cosine值影响色调的强度,Cosine值的计算可以利用下面这个公式,也即是点积公式:

 

     cos(lightDir,normal) = lightDir . normal / ( |lightDir| * |normal| )

     当法线向量和光照都被归一化,这个公式将被简化成:

     cos(lightDir,normal) = lightDir . normal


2、所以在GLSL编程时经常会看到如下代码:

Vec3 normal = gl_NormalMatrix * gl_Normal;

Vec3 tnorm = normalize( normal  );

float intensity = dot( lightdir, n );

这里如果没有进行 normalize( normal  );那显然dot是不成行的,即得不到光的强度。

 

3、光线向量的计算

光线向量即从光源点发出,到顶点结束的向量,所以豪无疑问的是我们首先必须得到光源位置以及顶点位置(以观察坐标为基):

(1)光源位置

我们自己设置一个光源位置,比如:uniform vec3 LightPostion;在应用程序中对其赋值。也可以通过GLSL内置的光照属性结构体来获取,结构命名为gl_LightSourceParameters,大概如下:

struct gl_LightSourceParameters {

        vec4 ambient;

        vec4 diffuse;

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值