You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

38 lines
1.3 KiB

  1. {$INCLUDE 'color.shdr'}
  2. {$CLASS PhongLight}
  3. {$PROPERTY UsePhongLight 'false'}
  4. {$IF UsePhongLight}
  5. {$VARYING 'vec3' 'vNormal'}
  6. {$VARYING 'vec3' 'vVertex'}
  7. {$END}
  8. {$END}
  9. {$CLASS PhongLightFrag $EXTENDS PhongLight ColorFrag}
  10. {$MAIN}
  11. vec4 color = {$CALL GetColor};
  12. {$IF UsePhongLight}
  13. vec3 eye = normalize(-vVertex);
  14. vec3 lightVec = gl_LightSource[0].position.xyz - vVertex;
  15. vec3 reflected = normalize(reflect(lightVec, vNormal));
  16. vec4 ambient = gl_LightSource[0].ambient * gl_FrontMaterial.ambient;
  17. vec4 diffuse = gl_LightSource[0].diffuse * max(dot(vNormal, lightVec), 0.0) * gl_FrontMaterial.diffuse;
  18. vec4 specular = gl_LightSource[0].specular * pow(max(dot(reflected, eye), 0.0), gl_FrontMaterial.shininess) * gl_FrontMaterial.specular;
  19. gl_FragColor = vec4((ambient + diffuse) * color) + specular;
  20. {$ELSE}
  21. gl_FragColor = color;
  22. {$END}
  23. {$END}
  24. {$END}
  25. {$CLASS PhongLightVert $EXTENDS PhongLight ColorVert}
  26. {$MAIN}
  27. {$INHERITED ColorVert $INLINE};
  28. {$IF UsePhongLight}
  29. vNormal = normalize(gl_NormalMatrix * gl_Normal);
  30. vVertex = vec3(gl_ModelViewMatrix * gl_Vertex);
  31. {$END}
  32. {$END}
  33. {$END}