From Reliable Guinea Pig, 2 Months ago, written in Text.
Embed
  1. // Shared variable passed to the fragment shader
  2. uniform vec3 lightPosition;
  3. uniform vec3 rightOrLeft;
  4. varying vec3 color;
  5.  
  6. void main() {
  7.     color =vec3(1.0,0.0,0.0);
  8.     vec3 move;
  9.  
  10.     if (length(rightOrLeft) == 1.0) {
  11.         move = vec3(0.15, 2.45, -0.65);}
  12.     else {
  13.         move = vec3(-0.15, 2.45, -0.65);}
  14.  
  15.     vec3 eyeToLight = move - lightPosition;
  16.  
  17. //   ************** X ROTATION ****************
  18. //   mat4 xMatrix = mat4(1.0, 0.0,        0.0,         0.0,
  19. //                       0.0, cos(angle), sin(angle), 0.0,
  20. //                       0.0, -sin(angle), cos(angle) , 0.0,
  21. //                       0.0, 0.0,        0.0,         1.0);
  22.  
  23. //   ************** Y ROTATION ****************
  24. //   mat4 yMatrix = mat4(cos(angle),  0.0, -sin(angle), 0.0,
  25. //                       0.0,         1.0, 0.0,        0.0,
  26. //                       sin(angle), 0.0, cos(angle), 0.0,
  27. //                       0.0,         0.0, 0.0,        1.0);
  28.  
  29. //   ************** Z ROTATION ****************
  30. //   mat4 zMatrix = mat4(cos(angle), sin(angle), 0.0, 0.0,
  31. //                       -sin(angle),  cos(angle), 0.0, 0.0,
  32. //                       0.0,         0.0,        1.0, 0.0,
  33. //                       0.0,         0.0,        0.0, 1.0);
  34.  
  35.  
  36.  
  37.  
  38.  
  39.  
  40.  
  41.  
  42.  
  43.     mat4 scaleInit = mat4(1.0, 0.0, 0.0, 0.0,
  44.                           0.0, 0.5, 0.0, 0.0,
  45.                           0.0, 0.0, 1.0, 0.0,
  46.                           0.0, 0.0, 0.0, 1.0);
  47.  
  48.     mat4 scaleMat = mat4(1.0, 0.0, 0.0, 0.0,
  49.                          0.0, length(eyeToLight), 0.0, 0.0,
  50.                          0.0, 0.0, 1.0, 0.0,
  51.                          0.0, 0.0, 0.0, 1.0);
  52.  
  53.     mat4 moveMat = mat4(1.0, 0.0, 0.0, 0.0,
  54.                          0.0, 1.0, 0.0, 0.0,
  55.                          0.0, 0.0, 1.0, 0.0,
  56.                          move.x, move.y, move.z, 1.0);
  57.  
  58.     float angle = -1.5708;
  59.     mat4 rotateMat = mat4(1.0, 0.0, 0.0, 0.0,
  60.                      0.0, cos(angle), sin(angle), 0.0,
  61.                      0.0, -sin(angle), cos(angle), 0.0,
  62.                      0.0, 0.0, 0.0, 1.0);
  63.  
  64.     vec3 z = normalize(eyeToLight);
  65.     vec3 x = cross(vec3(0.0, 1.0, 0.0), z);
  66.     vec3 y = cross(x,z);
  67.  
  68.     mat4 lookAt = mat4(x.x, x.y, x.z, 0.0,
  69.                        y.x, y.y, y.z, 0.0,
  70.                        z.x, z.y, z.z, 0.0,
  71.                        0.0, 0.0, 0.0, 1.0);
  72.  
  73.     gl_Position = projectionMatrix * modelViewMatrix * moveMat * lookAt * rotateMat  *scaleMat*scaleInit* vec4(position, 1.0);
  74.     vec4 colorPosition = moveMat * lookAt * rotateMat  *scaleMat * scaleInit* vec4(position, 1.0);
  75.     if (colorPosition.z < 0.0){
  76.                 color = vec3(1.0, 0.0, 1.0);
  77.  
  78.     }
  79. }