threepipe
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.

FragmentClippingExtensionPlugin.pars.glsl 1.7KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849
  1. #include <simpleCameraHelpers>
  2. uniform vec4 fragClippingPosition;
  3. uniform vec4 fragClippingParams;
  4. uniform float fragClippingCamAspect;
  5. #if FRAG_CLIPPING_MODE == FragmentClippingMode.Circle
  6. float fragClippingCircle(){
  7. vec2 pos = viewToScreen(vViewPosition.xyz).xy;
  8. float radius = fragClippingParams.x;
  9. vec2 center = fragClippingPosition.xy;
  10. pos.y /= fragClippingCamAspect;
  11. center.y /= fragClippingCamAspect;
  12. return length(pos - center) - radius;
  13. }
  14. #elif FRAG_CLIPPING_MODE == FragmentClippingMode.Ellipse
  15. float fragClippingEllipse(){
  16. vec2 pos = viewToScreen(vViewPosition.xyz).xy;
  17. vec2 radius = fragClippingParams.xy;
  18. vec2 center = fragClippingPosition.xy;
  19. pos.y /= fragClippingCamAspect;
  20. center.y /= fragClippingCamAspect;
  21. return length((pos - center) / radius) - 1.0;
  22. }
  23. #elif FRAG_CLIPPING_MODE == FragmentClippingMode.Rectangle
  24. float fragClippingRectangle(){
  25. vec2 pos = viewToScreen(vViewPosition.xyz).xy;
  26. vec2 radius = fragClippingParams.xy;
  27. vec2 center = fragClippingPosition.xy;
  28. pos.y /= fragClippingCamAspect;
  29. center.y /= fragClippingCamAspect;
  30. vec2 d = abs(pos - center) - radius;
  31. return min(max(d.x,d.y),0.0) + length(max(d,0.0));
  32. }
  33. #elif FRAG_CLIPPING_MODE == FragmentClippingMode.Plane
  34. float fragClippingPlane(){
  35. vec3 pos = vViewPosition.xyz;
  36. vec3 normal = fragClippingParams.xyz;
  37. float d = dot(pos, normal) - fragClippingParams.w;
  38. return d;
  39. }
  40. #elif FRAG_CLIPPING_MODE == FragmentClippingMode.Sphere
  41. float fragClippingSphere(){
  42. vec3 pos = vViewPosition.xyz;
  43. vec3 center = fragClippingPosition.xyz;
  44. float radius = fragClippingParams.x;
  45. pos.y /= fragClippingCamAspect;
  46. center.y /= fragClippingCamAspect;
  47. return length(pos - center) - radius;
  48. }
  49. #endif