OpenGL ES2.0 菲尼尔着色器

顶点着色器:

uniform mat4 uMVPMatrix; 		
uniform mat4 uMMatrix; 			
uniform vec3 uCamera;			
attribute vec3 aPosition;  		
attribute vec3 aNormal;    		
varying vec3 eyeVary;			
varying vec3 newNormalVary;		
void main()  { 
  gl_Position = uMVPMatrix * vec4(aPosition,1); 
    vec3 normalTarget=aPosition+aNormal;
  vec3 newNormal=(uMMatrix*vec4(normalTarget,1)).xyz-(uMMatrix*vec4(aPosition,1)).xyz;
  newNormal=normalize(newNormal);  
  newNormalVary=newNormal;
    vec3 eye = normalize(uCamera-(uMMatrix*vec4(aPosition,1)).xyz);
  eyeVary=eye;
} 

片元着色器:

precision mediump float;
uniform samplerCube sTexture;
varying vec3 eyeVary;		
varying vec3 newNormalVary;	
vec4 zfs( 
  in float zsl
){  
  vec3 vTextureCoord;	
  vec4 finalColorZS;		
  vec4 finalColorFS;		
  vec4 finalColor;  		
  const float maxH=0.7;	
  const float minH=0.2;	
  float sizeH=maxH-minH;
  float testValue=abs(dot(eyeVary,newNormalVary));	
  if(testValue>maxH)  {							
     vTextureCoord=refract(-eyeVary,newNormalVary,zsl);
     finalColor=textureCube(sTexture, vTextureCoord);  
  }  else if(testValue<=maxH&&testValue>=minH) {
     vTextureCoord=reflect(-eyeVary,newNormalVary);
     finalColorFS=textureCube(sTexture, vTextureCoord);  	
     vTextureCoord=refract(-eyeVary,newNormalVary,zsl);
     finalColorZS=textureCube(sTexture, vTextureCoord);  	
     float ratio=(testValue-minH)/sizeH;					
     finalColor=finalColorZS*ratio+(1.0-ratio)*finalColorFS;	
  }  else   {										
     vTextureCoord=reflect(-eyeVary,newNormalVary);
     finalColor=textureCube(sTexture, vTextureCoord);  
  }  
  return finalColor;									
}
void main(){
   vec4 finalColor=vec4(0.0,0.0,0.0,0.0);
   finalColor.r=zfs(0.97).r;  		
   finalColor.g=zfs(0.955).g;  		
   finalColor.b=zfs(0.94).b;  		
   gl_FragColor=finalColor;}		



  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值