GLSL实现简单硬件Anisotrop Lighting

  1. 各向异性光照往往用于处理一些具有各向异性表面的物体,如:光盘的盘面.为避免在程序
  2. 实时进行各向异性计算的高消耗,现可将表面的各向异性离线编制成一个纹理,这样就只
  3. 需要在着色器中对它进行查询就可以了.
  4. 具体的实现方法是:根据表面法向量N,光向量L和视向量V分别计算顶点纹理坐标,并在片元着色
  5. 器将差值后的结果进行纹理查找.
  6. gl_TexCoord[0].s = max(dot(L, N), 0.0);
  7. gl_TexCoord[0].t = 1.0 - max(dot(H, N), 0.0);   // 处理纹理倒置
  8. 备注:此处的H为半角向量

  9. 具体着色器代码:
    顶点着色器:
    uniform vec3 g_vec3LightPositionInWorld;
    uniform vec3 g_vec3CameraPositionInWorld;
  10. void main()
    {
     vec3 P = vec3(gl_Vertex);
     vec3 N = gl_Normal;
     
     vec3 L = normalize(g_vec3LightPositionInWorld - P);
     vec3 V = normalize(g_vec3CameraPositionInWorld - P);
     vec3 H = normalize(L + V);
     
     gl_TexCoord[0].s = max(dot(L, N), 0.0);
     gl_TexCoord[0].t = 1.0 - max(dot(H, N), 0.0); // 处理纹理倒置
     
        gl_Position = ftransform();
    }
  11. 片元着色器:
    uniform sampler2D g_AnisotropTexture;
  12. void main()
    {
        vec4 vec4DecalColor = texture2D(g_AnisotropTexture, gl_TexCoord[0].st);
        gl_FragColor = vec4(vec4DecalColor.rgb*vec4DecalColor.aaa*4.0, 1.0);
    }
  13. Demo效果图:
  14. exe文件:http://www.fileupyours.com/view/219112/GLSL/Anisotrop%20Lighting%20Demo.rar
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值