modeling/src/maths/vec3/transform.js

  1. /**
  2. * Transforms the given vector using the given matrix.
  3. *
  4. * @param {vec3} out - receiving vector
  5. * @param {vec3} vector - vector to transform
  6. * @param {mat4} matrix - transform matrix
  7. * @returns {vec3} out
  8. * @alias module:modeling/maths/vec3.transform
  9. */
  10. const transform = (out, vector, matrix) => {
  11. const x = vector[0]
  12. const y = vector[1]
  13. const z = vector[2]
  14. let w = matrix[3] * x + matrix[7] * y + matrix[11] * z + matrix[15]
  15. w = w || 1.0
  16. out[0] = (matrix[0] * x + matrix[4] * y + matrix[8] * z + matrix[12]) / w
  17. out[1] = (matrix[1] * x + matrix[5] * y + matrix[9] * z + matrix[13]) / w
  18. out[2] = (matrix[2] * x + matrix[6] * y + matrix[10] * z + matrix[14]) / w
  19. return out
  20. }
  21. module.exports = transform