ShadowVolumeAppearanceVS.js 7.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174
  1. //This file is automatically rebuilt by the Cesium build process.
  2. export default "attribute vec3 position3DHigh;\n\
  3. attribute vec3 position3DLow;\n\
  4. attribute float batchId;\n\
  5. #ifdef EXTRUDED_GEOMETRY\n\
  6. attribute vec3 extrudeDirection;\n\
  7. uniform float u_globeMinimumAltitude;\n\
  8. #endif // EXTRUDED_GEOMETRY\n\
  9. #ifdef PER_INSTANCE_COLOR\n\
  10. varying vec4 v_color;\n\
  11. #endif // PER_INSTANCE_COLOR\n\
  12. #ifdef TEXTURE_COORDINATES\n\
  13. #ifdef SPHERICAL\n\
  14. varying vec4 v_sphericalExtents;\n\
  15. #else // SPHERICAL\n\
  16. varying vec2 v_inversePlaneExtents;\n\
  17. varying vec4 v_westPlane;\n\
  18. varying vec4 v_southPlane;\n\
  19. #endif // SPHERICAL\n\
  20. varying vec3 v_uvMinAndSphericalLongitudeRotation;\n\
  21. varying vec3 v_uMaxAndInverseDistance;\n\
  22. varying vec3 v_vMaxAndInverseDistance;\n\
  23. #endif // TEXTURE_COORDINATES\n\
  24. #if defined(TEXTURE_COORDINATES) && !defined(SPHERICAL) && defined(UINT8_PACKING)\n\
  25. vec4 clampAndMagnitude(vec4 sd)\n\
  26. {\n\
  27. vec4 d = sd;\n\
  28. d.x = czm_branchFreeTernary(sd.x < 128.0, d.x, (255.0 - sd.x));\n\
  29. d.x = floor(0.5 + d.x);\n\
  30. d.y = floor(0.5 + d.y);\n\
  31. d.z = floor(0.5 + d.z);\n\
  32. d.w = floor(0.5 + d.w);\n\
  33. return d;\n\
  34. }\n\
  35. float unpackLowLessThan100k(vec4 sd)\n\
  36. {\n\
  37. vec4 d = clampAndMagnitude(sd);\n\
  38. return (1000.0 * d.x + 10.0 * d.y + 0.1 * d.z + 0.001 * d.w) * czm_branchFreeTernary(sd.x < 128.0, 1.0, -1.0);\n\
  39. }\n\
  40. vec3 southwest_LOW(vec4 x, vec4 y, vec4 z)\n\
  41. {\n\
  42. vec3 value;\n\
  43. value.x = unpackLowLessThan100k(x);\n\
  44. value.y = unpackLowLessThan100k(y);\n\
  45. value.z = unpackLowLessThan100k(z);\n\
  46. return value;\n\
  47. }\n\
  48. float unpackHighMagLessThan100Million(vec4 sd)\n\
  49. {\n\
  50. vec4 d = clampAndMagnitude(sd);\n\
  51. return (1000000.0 * d.x + 10000.0 * d.y + 100.0 * d.z + d.w) * czm_branchFreeTernary(sd.x < 128.0, 1.0, -1.0);\n\
  52. }\n\
  53. vec3 southwest_HIGH(vec4 x, vec4 y, vec4 z)\n\
  54. {\n\
  55. vec3 value;\n\
  56. value.x = unpackHighMagLessThan100Million(x);\n\
  57. value.y = unpackHighMagLessThan100Million(y);\n\
  58. value.z = unpackHighMagLessThan100Million(z);\n\
  59. return value;\n\
  60. }\n\
  61. #ifdef COLUMBUS_VIEW_2D\n\
  62. vec4 unpackPlanes2D_HIGH(vec4 x, vec4 y, vec4 z, vec4 w)\n\
  63. {\n\
  64. vec4 value;\n\
  65. value.x = unpackHighMagLessThan100Million(x);\n\
  66. value.y = unpackHighMagLessThan100Million(y);\n\
  67. value.z = unpackHighMagLessThan100Million(z);\n\
  68. value.w = unpackHighMagLessThan100Million(w);\n\
  69. return value;\n\
  70. }\n\
  71. vec4 unpackPlanes2D_LOW(vec4 x, vec4 y, vec4 z, vec4 w)\n\
  72. {\n\
  73. vec4 value;\n\
  74. value.x = unpackLowLessThan100k(x);\n\
  75. value.y = unpackLowLessThan100k(y);\n\
  76. value.z = unpackLowLessThan100k(z);\n\
  77. value.w = unpackLowLessThan100k(w);\n\
  78. return value;\n\
  79. }\n\
  80. #else\n\
  81. float unpackLowLessThan1000k(vec4 sd)\n\
  82. {\n\
  83. vec4 d = clampAndMagnitude(sd);\n\
  84. return (10000.0 * d.x + 100.0 * d.y + d.z + 0.01 * d.w) * czm_branchFreeTernary(sd.x < 128.0, 1.0, -1.0);\n\
  85. }\n\
  86. vec3 unpackExtent(vec4 x, vec4 y, vec4 z)\n\
  87. {\n\
  88. vec3 value;\n\
  89. value.x = unpackLowLessThan1000k(x);\n\
  90. value.y = unpackLowLessThan1000k(y);\n\
  91. value.z = unpackLowLessThan1000k(z);\n\
  92. return value;\n\
  93. }\n\
  94. #endif\n\
  95. #endif\n\
  96. void main()\n\
  97. {\n\
  98. vec4 position = czm_computePosition();\n\
  99. #ifdef EXTRUDED_GEOMETRY\n\
  100. float delta = min(u_globeMinimumAltitude, czm_geometricToleranceOverMeter * length(position.xyz));\n\
  101. delta *= czm_sceneMode == czm_sceneMode3D ? 1.0 : 0.0;\n\
  102. position = position + vec4(extrudeDirection * delta, 0.0);\n\
  103. #endif\n\
  104. #ifdef TEXTURE_COORDINATES\n\
  105. #ifdef SPHERICAL\n\
  106. v_sphericalExtents = czm_batchTable_sphericalExtents(batchId);\n\
  107. v_uvMinAndSphericalLongitudeRotation.z = czm_batchTable_longitudeRotation(batchId);\n\
  108. #else // SPHERICAL\n\
  109. #ifdef COLUMBUS_VIEW_2D\n\
  110. #ifdef UINT8_PACKING\n\
  111. vec4 planes2D_high = unpackPlanes2D_HIGH(czm_batchTable_planes2D_HIGH_x(batchId),\n\
  112. czm_batchTable_planes2D_HIGH_y(batchId),\n\
  113. czm_batchTable_planes2D_HIGH_z(batchId),\n\
  114. czm_batchTable_planes2D_HIGH_w(batchId));\n\
  115. vec4 planes2D_low = unpackPlanes2D_LOW(czm_batchTable_planes2D_LOW_x(batchId),\n\
  116. czm_batchTable_planes2D_LOW_y(batchId),\n\
  117. czm_batchTable_planes2D_LOW_z(batchId),\n\
  118. czm_batchTable_planes2D_LOW_w(batchId));\n\
  119. #else // UINT8_PACKING\n\
  120. vec4 planes2D_high = czm_batchTable_planes2D_HIGH(batchId);\n\
  121. vec4 planes2D_low = czm_batchTable_planes2D_LOW(batchId);\n\
  122. #endif // UINT8_PACKING\n\
  123. vec2 idlSplitNewPlaneHiLow = vec2(EAST_MOST_X_HIGH - (WEST_MOST_X_HIGH - planes2D_high.w), EAST_MOST_X_LOW - (WEST_MOST_X_LOW - planes2D_low.w));\n\
  124. bool idlSplit = planes2D_high.x > planes2D_high.w && position3DLow.y > 0.0;\n\
  125. planes2D_high.w = czm_branchFreeTernary(idlSplit, idlSplitNewPlaneHiLow.x, planes2D_high.w);\n\
  126. planes2D_low.w = czm_branchFreeTernary(idlSplit, idlSplitNewPlaneHiLow.y, planes2D_low.w);\n\
  127. idlSplit = planes2D_high.x > planes2D_high.w && position3DLow.y < 0.0;\n\
  128. idlSplitNewPlaneHiLow = vec2(WEST_MOST_X_HIGH - (EAST_MOST_X_HIGH - planes2D_high.x), WEST_MOST_X_LOW - (EAST_MOST_X_LOW - planes2D_low.x));\n\
  129. planes2D_high.x = czm_branchFreeTernary(idlSplit, idlSplitNewPlaneHiLow.x, planes2D_high.x);\n\
  130. planes2D_low.x = czm_branchFreeTernary(idlSplit, idlSplitNewPlaneHiLow.y, planes2D_low.x);\n\
  131. vec3 southWestCorner = (czm_modelViewRelativeToEye * czm_translateRelativeToEye(vec3(0.0, planes2D_high.xy), vec3(0.0, planes2D_low.xy))).xyz;\n\
  132. vec3 northWestCorner = (czm_modelViewRelativeToEye * czm_translateRelativeToEye(vec3(0.0, planes2D_high.x, planes2D_high.z), vec3(0.0, planes2D_low.x, planes2D_low.z))).xyz;\n\
  133. vec3 southEastCorner = (czm_modelViewRelativeToEye * czm_translateRelativeToEye(vec3(0.0, planes2D_high.w, planes2D_high.y), vec3(0.0, planes2D_low.w, planes2D_low.y))).xyz;\n\
  134. #else // COLUMBUS_VIEW_2D\n\
  135. #ifdef UINT8_PACKING\n\
  136. vec3 low = southwest_LOW(czm_batchTable_southWest_LOW_x(batchId), czm_batchTable_southWest_LOW_y(batchId), czm_batchTable_southWest_LOW_z(batchId));\n\
  137. vec3 high = southwest_HIGH(czm_batchTable_southWest_HIGH_x(batchId), czm_batchTable_southWest_HIGH_y(batchId), czm_batchTable_southWest_HIGH_z(batchId));\n\
  138. vec3 southWestCorner = (czm_modelViewRelativeToEye * czm_translateRelativeToEye(high, low)).xyz;\n\
  139. vec3 northWestCorner = czm_normal * unpackExtent(\n\
  140. czm_batchTable_northward_x(batchId),\n\
  141. czm_batchTable_northward_y(batchId),\n\
  142. czm_batchTable_northward_z(batchId)) + southWestCorner;\n\
  143. vec3 southEastCorner = czm_normal * unpackExtent(\n\
  144. czm_batchTable_eastward_x(batchId),\n\
  145. czm_batchTable_eastward_y(batchId),\n\
  146. czm_batchTable_eastward_z(batchId)) + southWestCorner;\n\
  147. #else // UINT8_PACKING\n\
  148. vec3 southWestCorner = (czm_modelViewRelativeToEye * czm_translateRelativeToEye(czm_batchTable_southWest_HIGH(batchId), czm_batchTable_southWest_LOW(batchId))).xyz;\n\
  149. vec3 northWestCorner = czm_normal * czm_batchTable_northward(batchId) + southWestCorner;\n\
  150. vec3 southEastCorner = czm_normal * czm_batchTable_eastward(batchId) + southWestCorner;\n\
  151. #endif // UINT8_PACKING\n\
  152. #endif // COLUMBUS_VIEW_2D\n\
  153. vec3 eastWard = southEastCorner - southWestCorner;\n\
  154. float eastExtent = length(eastWard);\n\
  155. eastWard /= eastExtent;\n\
  156. vec3 northWard = northWestCorner - southWestCorner;\n\
  157. float northExtent = length(northWard);\n\
  158. northWard /= northExtent;\n\
  159. v_westPlane = vec4(eastWard, -dot(eastWard, southWestCorner));\n\
  160. v_southPlane = vec4(northWard, -dot(northWard, southWestCorner));\n\
  161. v_inversePlaneExtents = vec2(1.0 / eastExtent, 1.0 / northExtent);\n\
  162. #endif // SPHERICAL\n\
  163. vec4 uvMinAndExtents = czm_batchTable_uvMinAndExtents(batchId);\n\
  164. vec4 uMaxVmax = czm_batchTable_uMaxVmax(batchId);\n\
  165. v_uMaxAndInverseDistance = vec3(uMaxVmax.xy, uvMinAndExtents.z);\n\
  166. v_vMaxAndInverseDistance = vec3(uMaxVmax.zw, uvMinAndExtents.w);\n\
  167. v_uvMinAndSphericalLongitudeRotation.xy = uvMinAndExtents.xy;\n\
  168. #endif // TEXTURE_COORDINATES\n\
  169. #ifdef PER_INSTANCE_COLOR\n\
  170. v_color = czm_batchTable_color(batchId);\n\
  171. #endif\n\
  172. gl_Position = czm_depthClampFarPlane(czm_modelViewProjectionRelativeToEye * position);\n\
  173. }\n\
  174. ";