osg通过glsl实现一个平面的水效果(法线贴图) 【转】

本文介绍如何使用OpenGL Shading Language (GLSL) 和法线贴图在OpenSceneGraph (osg)中创建一个简单的水面效果。通过调整时间和法线纹理坐标,实现了水面波动的视觉效果。
摘要由CSDN通过智能技术生成

转自 http://blog.sina.com.cn/s/blog_78ea87380101ehk3.html

此文实现一个简单的的水面效果,主要是法线贴图, 效果图如下:

 

osg通过glsl实现一个平面的水效果(法线贴图)

此文分为三部分:vertexShader, fragmentShader, main;
 
vertexShader:
 

varying vec3 lightdir;           //切线空间灯光向量;

varying vec3 eyedir;             //切线空间眼点向量;

varying vec4 ambient, diffuse, specular;

attribute vec3 tangent;          //顶点切线;

uniform float time;                       //时间更新;

uniform vec3  lightPos;         //灯光的位置;

void main()

{

         vec3 vVertex = vec3(gl_ModelViewMatrix * gl_Vertex);

         vec3 L = normalize(lightPos - vVertex);                 //定点到光源向量;

         vec3 E = normalize(-vVertex);                                     //定点到眼点向量;

         vec3 N = normalize(gl_NormalMatrix * gl_Normal);

         vec3 H = normalize(L + E);

         //获取漫反射, 镜面反射量;

         ambient = vec4(1.0,1.0,1.0,1.0);

         diffuse = vec4(1.0,1.0,1.0,1.0);

         specular = vec4(1.0,1.0,1.0,1.0);

         float _diffuse = max(dot(L, N), 0.0);

         if(_diffuse > 0.0)

         {

                 diffuse = diffuse * _diffuse;

                 float _specular = max(dot(H,N),0.0);

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值