GLSL实现简单硬件Anisotrop Lighting 【转】

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 【转】

时间: 2024-11-14 12:00:47

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

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

阿里云大数据三次技术突围:Greenplum.Hadoop和"飞天"  对于企业来说,到底什么是云计算?相信很多企业都有这样的困惑,让我们一起回到这个原始的起点探讨究竟什么是云计算?云计算对于企业而言到底意味什么? 云计算的三条发展路径及三种落地形态 当回到最初的起点再审视云计算的发展路径,可以发现,经过十余年的发展演进,云计算有三条发展路径,并且最终沉淀下来了三种落地形态. 第一条路:源自于谷歌对大规模数据的处理,谷歌为全球的互联网用户提供同一个服务--搜索,它需要将全世界所有的网站

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

Linux内核分析(四) 两天没有更新了,上次博文我们分析了linux的内存管理子系统,本来我不想对接下来的进程管理子系统.网络子系统.虚拟文件系统在这个阶段进行分析的,但是为了让大家对内核有个整体的把握,今天还是简单的介绍一下剩余的几个子系统,我们对这几个子系统的分析,只要了解其作用和部分内容即可,不必深究,等我们写上几个驱动,到时候按照驱动再来分析这几个子系统我们就清晰多了. 在http://www.cnblogs.com/wrjvszq/p/4257164.html一文我们提到过linux

从学习到工作,杰出电子工程师的养成日记

相信看到这篇文章的都是电子工程师,或者即将步入电子这个行业的未来工程师,很多人会问这样那样的问题,例如我怎样才能做一个电子工程师,怎样去应聘一个电子工程师,需要什么技能,如果做得不开心了我想转行的话可不可以,改怎么做啊?下面我们整理一些工程师的看法,让大家对工程师的轨迹有一定的了解,首先要讲述的是电子工程师怎样成长. 怎样成为一个出色电子工程师 先说课本,做电子工程师的话数学跟英语,必备技能.前者保证你理论过关,我是学自动化的,我们专业有这么一句话"大一高数没学好,一路兵败如山倒":后

Android深度探索HAL与驱动开发

第五章 开发板是嵌入式开发的前提,我们使用的是三星公司生产的s3c6410开发板.s3c6410开发板是一款低功耗,性价比极高的处理器,也为2.5G和3G通信服务提供了优化的硬件性能以及强大的加速器.包括运动视频处理,音频处理等.接下来安装串口调试工具:minicom.检查当前系统是否支持usb转串口,安装minicom,配置minicom,测试minicom.配置完成后烧写android系统.用串口线或usb转串口线连接开发板与pc启动minicom.进入eboot状态,擦除nandflash

Linux内核软RPS实现网络接收软中断的负载均衡分发

例行的Linux软中断分发机制与问题 Linux的中断分为上下两半部,一般而言(事实确实也是如此),被中断的CPU执行中断处理函数,并在在本CPU上触发软中断(下半部),等硬中断处理返回后,软中断随即开中断在本CPU运行,或者wake up本CPU上的软中断内核线程来处理在硬中断中pending的软中断.       换句话说,Linux和同一个中断向量相关的中断上半部和软中断都是在同一个CPU上执行的,这个可以通过raise_softirq这个接口看出来.这种设计的逻辑是正确的,但是在某些不甚

DSP与单片机的选用

最近我们公司开展一个新的项目,对传感器的模拟信号的采集,有两个要求:1.ad精度要求在16位 2.采样频率要求达到2000HZ..看来很多单片机,基本上都达不到这两个条件,之前用的stm32  12位ad,采样频率也只能保持在100左右. DSP与单片机 单片机的出现实现了简单的控制功能,暂时满足了工程设计的需求,但是随着计算机科学与技术.信号处理理论与方法的迅速发展,对工程中控制或信号处理芯片的实时性和精度的要求越来越高,在某些领域,低档单片机已不再能满足要求,这促使具有快速和高精度处理能力的

缓冲区Alpha Blend

(demo)源代码下载 Alpha blend Alpha混合通常是为了实现透明效果,透明效果的程度通过alpha值来控制,对于一个8bit的alpha chanel,可以产生0-255级透明效果,0表示完全透明,255表示完全不透明,在D3D中alpha值的来源主要有三种. 颜色混合方程 其中op在这里定义为混合操作 共有五种形式 ADD表示相加操作,即: SUBTRACT表示相关(目标-源),即: REV_SUBTRACT表示反射的相关(源-目标),即: MIN表示取源.目标颜色中较小值,即

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

Linux 内核提供一套双向链表的实现,你可以在 include/linux/list.h 中找到.我们以双向链表着手开始介绍 Linux 内核中的数据结构 ,因为这个是在 Linux 内核中使用最为广泛的数据结构,具体你可以 查看 这里. 首先让我们看一下主要的结构体: struct list_head { struct list_head *next, *prev; }; 你可以看到其与常见的结构体实现有显著不同,比如 glib 中所使用到的双向链表实现. struct GList { gp

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

Linux 内核提供一套双向链表的实现,你可以在 include/linux/list.h 中找到.我们以双向链表着手开始介绍 Linux 内核中的数据结构 ,因为这个是在 Linux 内核中使用最为广泛的数据结构,具体你可以 查看 这里. 首先让我们看一下主要的结构体: struct list_head { struct list_head *next, *prev; }; 你可以看到其与常见的结构体实现有显著不同,比如 glib 中所使用到的双向链表实现. struct GList { gp