PolylineVS.glsl 3.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103
  1. in vec3 position3DHigh;
  2. in vec3 position3DLow;
  3. in vec3 position2DHigh;
  4. in vec3 position2DLow;
  5. in vec3 prevPosition3DHigh;
  6. in vec3 prevPosition3DLow;
  7. in vec3 prevPosition2DHigh;
  8. in vec3 prevPosition2DLow;
  9. in vec3 nextPosition3DHigh;
  10. in vec3 nextPosition3DLow;
  11. in vec3 nextPosition2DHigh;
  12. in vec3 nextPosition2DLow;
  13. in vec4 texCoordExpandAndBatchIndex;
  14. out vec2 v_st;
  15. out float v_width;
  16. out vec4 v_pickColor;
  17. out float v_polylineAngle;
  18. void main()
  19. {
  20. float texCoord = texCoordExpandAndBatchIndex.x;
  21. float expandDir = texCoordExpandAndBatchIndex.y;
  22. bool usePrev = texCoordExpandAndBatchIndex.z < 0.0;
  23. float batchTableIndex = texCoordExpandAndBatchIndex.w;
  24. vec2 widthAndShow = batchTable_getWidthAndShow(batchTableIndex);
  25. float width = widthAndShow.x + 0.5;
  26. float show = widthAndShow.y;
  27. if (width < 1.0)
  28. {
  29. show = 0.0;
  30. }
  31. vec4 pickColor = batchTable_getPickColor(batchTableIndex);
  32. vec4 p, prev, next;
  33. if (czm_morphTime == 1.0)
  34. {
  35. p = czm_translateRelativeToEye(position3DHigh.xyz, position3DLow.xyz);
  36. prev = czm_translateRelativeToEye(prevPosition3DHigh.xyz, prevPosition3DLow.xyz);
  37. next = czm_translateRelativeToEye(nextPosition3DHigh.xyz, nextPosition3DLow.xyz);
  38. }
  39. else if (czm_morphTime == 0.0)
  40. {
  41. p = czm_translateRelativeToEye(position2DHigh.zxy, position2DLow.zxy);
  42. prev = czm_translateRelativeToEye(prevPosition2DHigh.zxy, prevPosition2DLow.zxy);
  43. next = czm_translateRelativeToEye(nextPosition2DHigh.zxy, nextPosition2DLow.zxy);
  44. }
  45. else
  46. {
  47. p = czm_columbusViewMorph(
  48. czm_translateRelativeToEye(position2DHigh.zxy, position2DLow.zxy),
  49. czm_translateRelativeToEye(position3DHigh.xyz, position3DLow.xyz),
  50. czm_morphTime);
  51. prev = czm_columbusViewMorph(
  52. czm_translateRelativeToEye(prevPosition2DHigh.zxy, prevPosition2DLow.zxy),
  53. czm_translateRelativeToEye(prevPosition3DHigh.xyz, prevPosition3DLow.xyz),
  54. czm_morphTime);
  55. next = czm_columbusViewMorph(
  56. czm_translateRelativeToEye(nextPosition2DHigh.zxy, nextPosition2DLow.zxy),
  57. czm_translateRelativeToEye(nextPosition3DHigh.xyz, nextPosition3DLow.xyz),
  58. czm_morphTime);
  59. }
  60. #ifdef DISTANCE_DISPLAY_CONDITION
  61. vec3 centerHigh = batchTable_getCenterHigh(batchTableIndex);
  62. vec4 centerLowAndRadius = batchTable_getCenterLowAndRadius(batchTableIndex);
  63. vec3 centerLow = centerLowAndRadius.xyz;
  64. float radius = centerLowAndRadius.w;
  65. vec2 distanceDisplayCondition = batchTable_getDistanceDisplayCondition(batchTableIndex);
  66. float lengthSq;
  67. if (czm_sceneMode == czm_sceneMode2D)
  68. {
  69. lengthSq = czm_eyeHeight2D.y;
  70. }
  71. else
  72. {
  73. vec4 center = czm_translateRelativeToEye(centerHigh.xyz, centerLow.xyz);
  74. lengthSq = max(0.0, dot(center.xyz, center.xyz) - radius * radius);
  75. }
  76. float nearSq = distanceDisplayCondition.x * distanceDisplayCondition.x;
  77. float farSq = distanceDisplayCondition.y * distanceDisplayCondition.y;
  78. if (lengthSq < nearSq || lengthSq > farSq)
  79. {
  80. show = 0.0;
  81. }
  82. #endif
  83. float polylineAngle;
  84. vec4 positionWC = getPolylineWindowCoordinates(p, prev, next, expandDir, width, usePrev, polylineAngle);
  85. gl_Position = czm_viewportOrthographic * positionWC * show;
  86. v_st.s = texCoord;
  87. v_st.t = czm_writeNonPerspective(clamp(expandDir, 0.0, 1.0), gl_Position.w);
  88. v_width = width;
  89. v_pickColor = pickColor;
  90. v_polylineAngle = polylineAngle;
  91. }