convertUvToCylinder.js 3.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677
  1. //This file is automatically rebuilt by the Cesium build process.
  2. export default "/* Cylinder defines (set in Scene/VoxelCylinderShape.js)\n\
  3. #define CYLINDER_HAS_SHAPE_BOUNDS_RADIUS\n\
  4. #define CYLINDER_HAS_SHAPE_BOUNDS_RADIUS_FLAT\n\
  5. #define CYLINDER_HAS_SHAPE_BOUNDS_HEIGHT\n\
  6. #define CYLINDER_HAS_SHAPE_BOUNDS_HEIGHT_FLAT\n\
  7. #define CYLINDER_HAS_SHAPE_BOUNDS_ANGLE\n\
  8. #define CYLINDER_HAS_SHAPE_BOUNDS_ANGLE_RANGE_EQUAL_ZERO\n\
  9. #define CYLINDER_HAS_SHAPE_BOUNDS_ANGLE_MIN_DISCONTINUITY\n\
  10. #define CYLINDER_HAS_SHAPE_BOUNDS_ANGLE_MAX_DISCONTINUITY\n\
  11. #define CYLINDER_HAS_SHAPE_BOUNDS_ANGLE_MIN_MAX_REVERSED\n\
  12. */\n\
  13. \n\
  14. #if defined(CYLINDER_HAS_SHAPE_BOUNDS_RADIUS)\n\
  15. uniform vec2 u_cylinderUvToShapeUvRadius; // x = scale, y = offset\n\
  16. #endif\n\
  17. #if defined(CYLINDER_HAS_SHAPE_BOUNDS_HEIGHT)\n\
  18. uniform vec2 u_cylinderUvToShapeUvHeight; // x = scale, y = offset\n\
  19. #endif\n\
  20. #if defined(CYLINDER_HAS_SHAPE_BOUNDS_ANGLE)\n\
  21. uniform vec2 u_cylinderUvToShapeUvAngle; // x = scale, y = offset\n\
  22. #endif\n\
  23. #if defined(CYLINDER_HAS_SHAPE_BOUNDS_ANGLE_MIN_DISCONTINUITY) || defined(CYLINDER_HAS_SHAPE_BOUNDS_ANGLE_MAX_DISCONTINUITY)\n\
  24. uniform vec2 u_cylinderShapeUvAngleMinMax;\n\
  25. #endif\n\
  26. #if defined(CYLINDER_HAS_SHAPE_BOUNDS_ANGLE_MIN_DISCONTINUITY) || defined(CYLINDER_HAS_SHAPE_BOUNDS_ANGLE_MAX_DISCONTINUITY) || defined(CYLINDER_HAS_SHAPE_BOUNDS_ANGLE_MIN_MAX_REVERSED)\n\
  27. uniform float u_cylinderShapeUvAngleRangeZeroMid;\n\
  28. #endif\n\
  29. \n\
  30. vec3 convertUvToShapeUvSpace(in vec3 positionUv) {\n\
  31. vec3 positionLocal = positionUv * 2.0 - 1.0; // [-1,+1]\n\
  32. \n\
  33. // Compute radius\n\
  34. #if defined(CYLINDER_HAS_SHAPE_BOUNDS_RADIUS_FLAT)\n\
  35. float radius = 1.0;\n\
  36. #else\n\
  37. float radius = length(positionLocal.xy); // [0,1]\n\
  38. #if defined(CYLINDER_HAS_SHAPE_BOUNDS_RADIUS)\n\
  39. radius = radius * u_cylinderUvToShapeUvRadius.x + u_cylinderUvToShapeUvRadius.y; // x = scale, y = offset\n\
  40. #endif\n\
  41. #endif\n\
  42. \n\
  43. // Compute height\n\
  44. #if defined(CYLINDER_HAS_SHAPE_BOUNDS_HEIGHT_FLAT)\n\
  45. float height = 1.0;\n\
  46. #else\n\
  47. float height = positionUv.z; // [0,1]\n\
  48. #if defined(CYLINDER_HAS_SHAPE_BOUNDS_HEIGHT)\n\
  49. height = height * u_cylinderUvToShapeUvHeight.x + u_cylinderUvToShapeUvHeight.y; // x = scale, y = offset\n\
  50. #endif\n\
  51. #endif\n\
  52. \n\
  53. // Compute angle\n\
  54. #if defined(CYLINDER_HAS_SHAPE_BOUNDS_ANGLE_RANGE_EQUAL_ZERO)\n\
  55. float angle = 1.0;\n\
  56. #else\n\
  57. float angle = (atan(positionLocal.y, positionLocal.x) + czm_pi) / czm_twoPi; // [0,1]\n\
  58. #if defined(CYLINDER_HAS_SHAPE_BOUNDS_ANGLE)\n\
  59. #if defined(CYLINDER_HAS_SHAPE_BOUNDS_ANGLE_MIN_MAX_REVERSED)\n\
  60. // Comparing against u_cylinderShapeUvAngleMinMax has precision problems. u_cylinderShapeUvAngleRangeZeroMid is more conservative.\n\
  61. angle += float(angle < u_cylinderShapeUvAngleRangeZeroMid);\n\
  62. #endif\n\
  63. \n\
  64. // Avoid flickering from reading voxels from both sides of the -pi/+pi discontinuity.\n\
  65. #if defined(CYLINDER_HAS_SHAPE_BOUNDS_ANGLE_MIN_DISCONTINUITY)\n\
  66. angle = angle > u_cylinderShapeUvAngleRangeZeroMid ? u_cylinderShapeUvAngleMinMax.x : angle;\n\
  67. #elif defined(CYLINDER_HAS_SHAPE_BOUNDS_ANGLE_MAX_DISCONTINUITY)\n\
  68. angle = angle < u_cylinderShapeUvAngleRangeZeroMid ? u_cylinderShapeUvAngleMinMax.y : angle;\n\
  69. #endif\n\
  70. \n\
  71. angle = angle * u_cylinderUvToShapeUvAngle.x + u_cylinderUvToShapeUvAngle.y; // x = scale, y = offset\n\
  72. #endif\n\
  73. #endif\n\
  74. \n\
  75. return vec3(radius, height, angle);\n\
  76. }\n\
  77. ";