ev_pro_55.vert 3.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124
  1. // (c)2011-2012 Cyrille Henry
  2. // part of EXTENDED VIEW TOOLKIT // gpl v3
  3. uniform vec2 V00, V01, V02, V03, V04;
  4. uniform vec2 V10, V11, V12, V13, V14;
  5. uniform vec2 V20, V21, V22, V23, V24;
  6. uniform vec2 V30, V31, V32, V33, V34;
  7. uniform vec2 V40, V41, V42, V43, V44;
  8. uniform vec2 Ttl,Tbl,Ttr,Tbr; // texture coordinate
  9. varying vec2 pos;
  10. vec2 CubicInterpolate( vec2 y0, vec2 y1, vec2 y2, vec2 y3, float mu)
  11. {
  12. float mu2 = mu*mu;
  13. vec2 a0 = -0.5*y0 + 1.5*y1 - 1.5*y2 + 0.5*y3;
  14. vec2 a1 = y0 - 2.5*y1 + 2.*y2 - 0.5*y3;
  15. vec2 a2 = -0.5*y0 + 0.5*y2;
  16. return(a0*mu*mu2+a1*mu2+a2*mu+y1);
  17. }
  18. void main()
  19. {
  20. gl_TexCoord[0] = gl_MultiTexCoord0;
  21. vec4 position = gl_Vertex;
  22. position.xy += 1.;
  23. position.xy /= 2.;
  24. pos = position.xy;
  25. vec2 tex_top = mix(Ttl,Ttr,position.x);
  26. vec2 tex_bottom = mix(Tbl,Tbr,position.x);
  27. gl_TexCoord[0].st = mix(tex_top,tex_bottom, position.y);
  28. position.xy *= 4.;
  29. vec2 mu = fract(position.xy);
  30. vec2 Vx0 = vec2(0.,0.);
  31. vec2 Vx1 = vec2(0.,0.);
  32. vec2 Vx2 = vec2(0.,0.);
  33. vec2 Vx3 = vec2(0.,0.);
  34. vec2 Vx4 = vec2(0.,0.);
  35. vec2 Vxy = vec2(0.,0.);
  36. if(position.x<1.)
  37. {
  38. Vx0 = CubicInterpolate(2.* V00 - V10, V00, V10, V20, mu.x);
  39. Vx1 = CubicInterpolate(2.* V01 - V11, V01, V11, V21, mu.x);
  40. Vx2 = CubicInterpolate(2.* V02 - V12, V02, V12, V22, mu.x);
  41. Vx3 = CubicInterpolate(2.* V03 - V13, V03, V13, V23, mu.x);
  42. Vx4 = CubicInterpolate(2.* V04 - V14, V04, V14, V24, mu.x);
  43. }
  44. if((position.x>=1.)&&(position.x<2.))
  45. {
  46. Vx0 = CubicInterpolate(V00, V10, V20, V30, mu.x);
  47. Vx1 = CubicInterpolate(V01, V11, V21, V31, mu.x);
  48. Vx2 = CubicInterpolate(V02, V12, V22, V32, mu.x);
  49. Vx3 = CubicInterpolate(V03, V13, V23, V33, mu.x);
  50. Vx4 = CubicInterpolate(V04, V14, V24, V34, mu.x);
  51. }
  52. if((position.x>=2.)&&(position.x<3.))
  53. {
  54. Vx0 = CubicInterpolate(V10, V20, V30, V40, mu.x);
  55. Vx1 = CubicInterpolate(V11, V21, V31, V41, mu.x);
  56. Vx2 = CubicInterpolate(V12, V22, V32, V42, mu.x);
  57. Vx3 = CubicInterpolate(V13, V23, V33, V43, mu.x);
  58. Vx4 = CubicInterpolate(V14, V24, V34, V44, mu.x);
  59. }
  60. if((position.x>=3.)&&(position.x<4.))
  61. {
  62. Vx0 = CubicInterpolate(V20, V30, V40, 2.* V40 - V30, mu.x);
  63. Vx1 = CubicInterpolate(V21, V31, V41, 2.* V41 - V31, mu.x);
  64. Vx2 = CubicInterpolate(V22, V32, V42, 2.* V42 - V32, mu.x);
  65. Vx3 = CubicInterpolate(V23, V33, V43, 2.* V43 - V33, mu.x);
  66. Vx4 = CubicInterpolate(V24, V34, V44, 2.* V44 - V34, mu.x);
  67. }
  68. if(position.x>=4.)
  69. {
  70. Vx0 = V40;
  71. Vx1 = V41;
  72. Vx2 = V42;
  73. Vx3 = V43;
  74. Vx4 = V44;
  75. }
  76. if(position.y<1.)
  77. {
  78. Vxy = CubicInterpolate(2. * Vx0 - Vx1, Vx0, Vx1, Vx2, mu.y);
  79. }
  80. if((position.y>=1.)&&(position.y<2.))
  81. {
  82. Vxy = CubicInterpolate(Vx0, Vx1, Vx2, Vx3, mu.y);
  83. }
  84. if((position.y>=2.)&&(position.y<3.))
  85. {
  86. Vxy = CubicInterpolate(Vx1, Vx2, Vx3, Vx4, mu.y);
  87. }
  88. if((position.y>=3.)&&(position.y<4.))
  89. {
  90. Vxy = CubicInterpolate(Vx2, Vx3, Vx4, 2. * Vx4 - Vx3, mu.y);
  91. }
  92. if(position.y>=4.)
  93. {
  94. Vxy = Vx4;
  95. }
  96. position.xy = Vxy;
  97. gl_Position = gl_ModelViewProjectionMatrix * position;
  98. }