CurvedNormal.hx 1.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051
  1. package hrt.shader;
  2. class CurvedNormal extends hxsl.Shader {
  3. static var SRC = {
  4. @const var VERTEX : Bool = true;
  5. @param var curvature : Float;
  6. @global var camera : {
  7. var view : Mat4;
  8. }
  9. @global var global : {
  10. @perObject var modelView : Mat4;
  11. };
  12. var relativePosition: Vec3;
  13. var transformedNormal : Vec3;
  14. var localNormal : Vec3;
  15. var localTangent : Vec3;
  16. function computeNormal() {
  17. var uv = relativePosition.xy * 2.0;
  18. var n = vec3(uv, sqrt(1. - clamp(dot(uv, uv), 0., 1.)));
  19. localNormal = normalize(mix(vec3(0,0,1), n, curvature));
  20. transformedNormal = normalize(localNormal * global.modelView.mat3());
  21. var rVec = vec3(0,1,0);
  22. localTangent = normalize(rVec - localNormal * dot(rVec, localNormal));
  23. }
  24. function fragment() {
  25. if( !VERTEX ) {
  26. computeNormal();
  27. }
  28. }
  29. function vertex() {
  30. if( VERTEX ) {
  31. computeNormal();
  32. }
  33. }
  34. };
  35. public function new( curvature : Float = 1.0 ) {
  36. super();
  37. this.curvature = curvature;
  38. }
  39. }