transpose.glsl 1.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445
  1. /**
  2. * Returns the transpose of the matrix. The input <code>matrix</code> can be
  3. * a <code>mat2</code>, <code>mat3</code>, or <code>mat4</code>.
  4. *
  5. * @name czm_transpose
  6. * @glslFunction
  7. *
  8. * @param {} matrix The matrix to transpose.
  9. *
  10. * @returns {} The transposed matrix.
  11. *
  12. * @example
  13. * // GLSL declarations
  14. * mat2 czm_transpose(mat2 matrix);
  15. * mat3 czm_transpose(mat3 matrix);
  16. * mat4 czm_transpose(mat4 matrix);
  17. *
  18. * // Transpose a 3x3 rotation matrix to find its inverse.
  19. * mat3 eastNorthUpToEye = czm_eastNorthUpToEyeCoordinates(
  20. * positionMC, normalEC);
  21. * mat3 eyeToEastNorthUp = czm_transpose(eastNorthUpToEye);
  22. */
  23. mat2 czm_transpose(mat2 matrix)
  24. {
  25. return mat2(
  26. matrix[0][0], matrix[1][0],
  27. matrix[0][1], matrix[1][1]);
  28. }
  29. mat3 czm_transpose(mat3 matrix)
  30. {
  31. return mat3(
  32. matrix[0][0], matrix[1][0], matrix[2][0],
  33. matrix[0][1], matrix[1][1], matrix[2][1],
  34. matrix[0][2], matrix[1][2], matrix[2][2]);
  35. }
  36. mat4 czm_transpose(mat4 matrix)
  37. {
  38. return mat4(
  39. matrix[0][0], matrix[1][0], matrix[2][0], matrix[3][0],
  40. matrix[0][1], matrix[1][1], matrix[2][1], matrix[3][1],
  41. matrix[0][2], matrix[1][2], matrix[2][2], matrix[3][2],
  42. matrix[0][3], matrix[1][3], matrix[2][3], matrix[3][3]);
  43. }