我要发帖 回复

管理员

735

主题

2万

积分

30

专家分

忠于职守杰出贡献鼓励

兴趣点(最多三项):

建模技术

私信
发表时间 : 2013-12-5 14:45:52 | 浏览 : 3644    评论 : 2
源码分类
原创性: 其他渠道
源码类型: OpenGL
支撑软件: c++
目录截图: -
文件大小: -
代码开放性: 完全开源
shader集合-冯氏光照phong(支持gl和gles)

vs:
  1. // Vertex shader Phong Shading - Per-pixel lighting
  2. precision mediump float;
  3.                                 uniform mat4 u_MVPMatrix;                                          
  4.                 uniform mat4 u_ModelMatrix;                  
  5.                 uniform mat4 u_RotationMatrix;
  6.                                 uniform vec4 u_LightPos;
  7.                                 uniform float u_FogDensity;

  8. // position and normal of the vertices
  9.                 attribute vec3 a_Position;                                                           
  10.                 attribute vec3 a_Normal;      
  11.                 attribute vec2 a_TexCoordinate;

  12.                                 varying vec2 v_TexCoordinate;

  13.                                 varying vec3 v_EyeSpaceNormal;
  14.                                 varying vec3 v_LightVec;
  15.                                 varying vec3 v_LightVec2;
  16.                                 varying vec3 v_EyeVec;
  17.                                 //varying float v_fogFactor;
  18.                         
  19. void main() {
  20.                 v_TexCoordinate = a_TexCoordinate;
  21.                 vec4 v_Position = vec4(a_Position,1.0);
  22.                 vec4 ModelVertex =  u_ModelMatrix*v_Position;
  23.                 v_EyeSpaceNormal = normalize(a_Normal);
  24.                
  25.          vec4 mvp = u_MVPMatrix * v_Position;
  26.         
  27.         //float density = u_FogDensity;
  28.         //const float LOG2 = 1.442695;
  29.         //float FogFragCoord = length(mvp);
  30.         //v_fogFactor = exp2( -density *  density * FogFragCoord * FogFragCoord * LOG2 );
  31.          
  32.          
  33.          
  34.          //if (u_LightPos.w == 0.0) {
  35.          
  36.                  //v_LightVec = normalize(u_LightPos.xyz*mat3(u_RotationMatrix));
  37.          //} else {
  38.          
  39.                   v_LightVec = normalize((u_LightPos.xyz-(ModelVertex.xyz*u_LightPos.w))*mat3(u_RotationMatrix));
  40.          
  41.                   
  42.          //}
  43.          
  44.          v_LightVec2 = normalize(u_LightPos.xyz-v_Position.xyz);
  45.          
  46.         v_EyeVec = normalize(-v_Position.xyz);

  47.         

  48.         gl_Position =  mvp;
  49. }
复制代码
ps:
  1. // Frag shader Phong Shading - Per-pixel lighting

  2. precision mediump float;

  3. // texture variables
  4. uniform sampler2D u_Texture; // color texture

  5. // material
  6. uniform vec4 u_MatAmbient;
  7. uniform vec4 u_MatDiffuse;
  8. uniform vec4 u_MatSpecular;
  9. uniform float u_MatShininess;
  10. uniform int u_TextureID;
  11. uniform vec4 u_FogColor;
  12. uniform float u_FogFar;
  13. uniform float u_FogDensity;

  14. varying vec2 v_TexCoordinate;
  15. varying vec3 v_EyeSpaceNormal;

  16. varying vec3 v_LightVec;
  17. varying vec3 v_LightVec2;
  18. varying vec3 v_EyeVec;
  19. varying float v_fogFactor;        
  20.         
  21. void main() {

  22.         //float len = length(lightDir);
  23.         //float distance = length(lightDir);
  24.     //float attenuation = 1.0 / distance;
  25.    
  26.         vec3 L = v_LightVec;
  27.         vec3 L2 = v_LightVec2;        
  28.         vec3 N = v_EyeSpaceNormal;
  29.     vec3 E = v_EyeVec;
  30.    
  31.     //vec3 H = normalize(normalize(v_Position.xyz+lightDir.xyz));
  32.    
  33.    
  34.     // Reflect the vector. Use this or reflect(incidentV, N)
  35.     vec3 reflectV = reflect(L2, N);
  36.    
  37.     //vec3 halfV =  normalize(vec3(normalize(v_Position.xyz))+L);
  38.    
  39.         float r = pow(max(dot(reflectV, E), 0.0),u_MatShininess);

  40.    
  41.     float NdotL = max(dot(N,L),0.0);
  42.     vec4 color;
  43.     vec4 texColor;
  44.     float alpha = 1.0;
  45.     vec4 specularTerm = u_MatSpecular * r;
  46.     //specularTerm = u_MatSpecular * pow(max(dot(N, H),0.0), u_MatShininess);
  47.   
  48.          
  49.    
  50.     //if (NdotL>0.0) {
  51.    
  52.    
  53.                         if (u_TextureID != -1) {
  54.                                 texColor = texture2D(u_Texture, v_TexCoordinate);
  55.                            
  56.                         //color = texture2D(u_Texture, v_TexCoordinate)*NdotL;//+specularTerm+u_MatAmbient;
  57.                             color =texColor*u_MatDiffuse*NdotL+specularTerm+texColor*u_MatAmbient;
  58.                             alpha = u_MatDiffuse.a*texColor.a;
  59.                             if (alpha==0.0)
  60.                             discard;
  61.                            
  62.                            }
  63.                     else {
  64.                             color = u_MatDiffuse*NdotL+specularTerm+u_MatAmbient;
  65.                             alpha = u_MatDiffuse.a;
  66.                            
  67.                     }
  68.                                  
  69.                                  
  70.                                  
  71.                                  
  72.   //} else {
  73.   //discard;
  74.   // }
  75.    
  76.            
  77.    
  78.     //float fog_far = 2000.0;
  79.                    //float fog_density = 4.5;
  80.                    //float fog_cord = gl_FragCoord.z / gl_FragCoord.w/ u_FogFar;
  81.                   
  82.                    //float fog = fog_cord * u_FogDensity;
  83.    
  84.             
  85.     gl_FragColor = vec4(color.rgb,alpha);
  86.             //gl_FragColor = mix(u_FogColor,vec4(color.rgb,alpha),clamp(1.0-fog,0.0,1.0));
  87.             //gl_FragColor = mix(u_FogColor,vec4(color.rgb,alpha),v_fogFactor);
  88.    
  89.             
  90.    
  91.         
  92. }
复制代码

phone.zip

2.36 KB, 下载次数: 21

最近VR访客查看更多↓

UE4   |   虚幻引擎   |   Unity VR    |    Hololens
chinawalltin 评论于2014-2-12 12:13:37
顶一下啊 老大贡献很多 学了
david_m 评论于2014-9-2 23:23:03
学习了
勤省,笃学,自强

手机版|VR开发网 统计 津ICP备18009691号
网安备12019202000257

GMT+8, 2021-5-8 03:35 AM

返回顶部