http://blog.csdn.net/a3070173/archive/2008/11/13/3294660.aspx

各向异性光照往往用于处理一些具有各向异性表面的物体,如:光盘的盘面.为避免在程序
实时进行各向异性计算的高消耗,现可将表面的各向异性离线编制成一个纹理,这样就只
需要在着色器中对它进行查询就可以了.

具体的实现方法是:根据表面法向量N,光向量L和视向量V分别计算顶点纹理坐标,并在片元着色
器将差值后的结果进行纹理查找.
gl_TexCoord[0].s = max(dot(L, N), 0.0);
gl_TexCoord[0].t = 1.0 - max(dot(H, N), 0.0);   // 处理纹理倒置
备注:此处的H为半角向量

具体着色器代码:
顶点着色器:
uniform vec3 g_vec3LightPositionInWorld;
uniform vec3 g_vec3CameraPositionInWorld;
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();
}
片元着色器:
uniform sampler2D g_AnisotropTexture;
void main()
{
    vec4 vec4DecalColor = texture2D(g_AnisotropTexture, gl_TexCoord[0].st);
    gl_FragColor = vec4(vec4DecalColor.rgb*vec4DecalColor.aaa*4.0, 1.0);
}

Demo效果图:

exe文件:http://www.fileupyours.com/view/219112/GLSL/Anisotrop%20Lighting%20Demo.rar

GLSL实现简单硬件Anisotrop Lighting 【转】的更多相关文章

  1. OpenGl中使用着色器的基本步骤及GLSL渲染简单示例

    OpenGL着色语言(OpenGL Shading Language,GLSL)是用来在OpenGL中着色编程的语言,是一种具有C/C++风格的高级过程语言,同样也以main函数开始,只不过执行过程是 ...

  2. Cesium原理篇:5最长的一帧之影像

    如果把地球比做一个人,地形就相当于这个人的骨骼,而影像就相当于这个人的外表了.之前的几个系列,我们全面的介绍了Cesium的地形内容,详见: Cesium原理篇:1最长的一帧之渲染调度 Cesium原 ...

  3. Unity Shader学习笔记-1

    本篇文章是对Unity Shader入门精要的学习笔记,插图大部分来自冯乐乐女神的github 如果有什么说的不正确的请批评指正 目录 渲染流水线 流程图 Shader作用 屏幕映射 三角形遍历 两大 ...

  4. Linux 内核数据结构:Linux 双向链表

    Linux 内核提供一套双向链表的实现,你可以在 include/linux/list.h 中找到.我们以双向链表着手开始介绍 Linux 内核中的数据结构 ,因为这个是在 Linux 内核中使用最为 ...

  5. Linux 内核数据结构:双向链表

    Linux 内核提供一套双向链表的实现,你可以在 include/linux/list.h 中找到.我们以双向链表着手开始介绍 Linux 内核中的数据结构 ,因为这个是在 Linux 内核中使用最为 ...

  6. sd 卡驱动--基于高通平台

    点击打开链接 内容来自以下博客: http://blog.csdn.net/qianjin0703/article/details/5918041 Linux设备驱动子系统第二弹 - SD卡 (有介绍 ...

  7. 阿里云大数据三次技术突围:Greenplum、Hadoop和“飞天”

    阿里云大数据三次技术突围:Greenplum.Hadoop和"飞天"    对于企业来说,到底什么是云计算?相信很多企业都有这样的困惑,让我们一起回到这个原始的起点探讨究竟什么是云 ...

  8. Linux内核分析(四)----进程管理|网络子系统|虚拟文件系统|驱动简介

    原文:Linux内核分析(四)----进程管理|网络子系统|虚拟文件系统|驱动简介 Linux内核分析(四) 两天没有更新了,上次博文我们分析了linux的内存管理子系统,本来我不想对接下来的进程管理 ...

  9. 19.Linux-USB总线驱动分析

    如下图所示,以windows为例,我们插上一个没有USB设备驱动的USB,就会提示你安装驱动程序 为什么一插上就有会提示信息? 是因为windows自带了USB总线驱动程序, USB总线驱动程序负责: ...

随机推荐

  1. 微信开发之Ngrok环境准备(一)

    一.为什么要使用ngrok? 各位肯定都知道,做微信开发,我们的开发服务器需要和微信服务器做交互,SO,我们需要准备一台放置在公网的服务器,能够使得我们的服务器可以正常访问微信服务器,并且微信服务器也 ...

  2. CABasicAnimation(CAKeyframeAnimation)keypath 取值

    - keyPath可以使用的key - #define angle2Radian(angle) ((angle)/180.0*M_PI) - transform.rotation.x 围绕x轴翻转 参 ...

  3. AutoLayout UITableViewCell 动态高度

    从这里http://www.cnblogs.com/liandwufan/p/4516956.html?utm_source=tuicool 转载过来的 -(UITableViewCell*)tabl ...

  4. 测试xss和xsf

    xss注入攻击: 123123123 被动注入: 1231231231231231 主动注入: 对不起,你需要登录才能评论 用户名 密码

  5. UNIX系统文件

    密码文件 密码文件又称用户数据库,一般为/etc/passwd,对应的结构为struct passwd,该文件内容大体如下: 描述 passwd字段 用户名 char* pw_name 加密密码 ch ...

  6. codeforce 702C Cellular Network 二分答案

    http://codeforces.com/contest/702 题意:n个村庄,m个机站,问机站最短半径覆盖完所有村庄 思路:直接二分答案 二分太弱,调了半天..... // #pragma co ...

  7. redis在mac上的安装

    mac 上安装 redis 首先必须保证mac 已经安装 xcode. 因为make时要用到 Xcode 的command Tools . (1)下载 redis   http://redis.goo ...

  8. 【Spark学习】Apache Spark for 第三方Hadoop分发版

    Spark版本:1.1.1 本文系从官方文档翻译而来,转载请尊重译者的工作,注明以下链接: http://www.cnblogs.com/zhangningbo/p/4137979.html

  9. AS3 条件编译

    转:http://www.lite3.cn/blog/?p=404&cpage=1 知道C/C++ 有条件编译,一直想着AS要是也有条件编译就好了,今天搜了半天Google,终于让我找到了 下 ...

  10. mysql performance_schema 初探

    mysql  performance_schema 初探: mysql 5.5 版本 新增了一个性能优化的引擎: PERFORMANCE_SCHEMA 这个功能默认是关闭的: 需要设置参数: perf ...