黎明的剔透里伸出了你沁清的暧昧

Graphics|EngineDev|GameDev|2D&3D Art

  C++博客 :: 首页 :: 新随笔 :: 联系 :: 聚合  :: 管理 ::
  60 随笔 :: 1 文章 :: 18 评论 :: 0 Trackbacks
各向异性与均向相反,是指在不同方向具有不同行为的性质,特殊的晶体会导致各向异性,材质表面上存在有组织的细小凹凸槽也会导致各向异性,各向异性反射是指:各向异性表面反射光的一种现象。
1.线性各向异性
2.径向各向异性
3.圆柱形各向异性
Bank BRDF属于经验模型,由于计算简单,且效果良好,所以该模型在各向异性光照效果的模拟非常常用,其模型计算公式很多书上有介绍,注意计算切向量,在normal map里面也有介绍。
不带纹理的光照效果>>不知道这个程序问题在哪
Vertex Shader:
 1uniform vec3 lightposition;//光源为位置
 2uniform vec3 eyeposition;//相机位置
 3varying float  NdotL, NdotH, NdotV, VdotH, LdotT, VdotT;
 4void main(void){
 5
 6    vec3 objPosition = vec3 (gl_ModelViewMatrix * gl_Vertex);
 7    vec3 Normal = normalize (gl_NormalMatrix * gl_Normal);
 8    vec3 LightDir = normalize (lightposition - objPosition);
 9    vec3 EyeDir = normalize (eyeposition - objPosition);
10    vec3 HalfVec = normalize (LightDir + EyeDir);
11    
12    vec3 TangVec = normalize(cross(Normal, EyeDir));
13
14    NdotL = max(dot(Normal, LightDir), 0.0);
15    LdotT = max(dot(LightDir, TangVec), 0.0);
16    VdotT = max(dot(EyeDir, TangVec), 0.0);
17    gl_Position = ftransform();
18}

Frag Shader:
 1uniform vec4 ambient;
 2uniform vec4 DiffuseLightColor;
 3uniform vec4 SpecularLightColor;
 4uniform float shininess;
 5varying float NdotL, NdotH, NdotV, VdotH, LdotT, VdotT ;
 6float diff=0.1;
 7float spec=1.0;
 8void main(void)
 9     float sqrt1 = sqrt(1.0 - pow(LdotT, 2.0));
10     float sqrt2 = sqrt(1.0 - pow(VdotT, 2.0)); 
11     float Rs=sqrt1*sqrt2 - LdotT*VdotT;
12     vec3 diffuse = diff * vec3(DiffuseLightColor) * NdotL;
13     float BRDF = spec * pow(Rs,shininess);
14     vec3 specular =BRDF *vec3(SpecularLightColor) * NdotL;
15 
16     vec4 Color = vec4((diffuse + specular),1.0); 
17     Color += ambient;
18     gl_FragColor = Color;
19}
渲染效果不是很好
改进后的效果如图:









posted on 2012-03-06 13:06 情绝格调(fresmaster) 阅读(1075) 评论(0)  编辑 收藏 引用 所属分类: Graphics

只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理