A newer version of Max is available. Click here to access the latest version of this document.

jit.gl.lua Vector Math

The vector math functions in jit.gl.lua are located in the vec module and are organized into six categories. These categories are:

  • vec.vec2
  • vec.vec3
  • vec.vec4
  • vec.quat
  • vec.mat3
  • vec.mat4
The arguments to all of the vector math functions are tables containing the appropriate number of values for the data type. For example a vec2 is a table with two elements, {1, 2}, while a mat3 has nine elements {1, 2, 3, 4, 5, 6, 7, 8, 9}. The matrices are specified in column-major order so for a mat3, the first three elements are the first column, the second three the second column and so on.

vec2

-- res is a 1 or 0 depending on equality
res = vec2.equal(v1, v2)
-- res is a 1 or 0 depending on equality
res = vec2.not_equal(v1, v2)
res = vec2.dot(v1, v2)
res = vec2.normalize(v)
res = vec2.mult(v1, v2)
res = vec2.scale(v, s)
res = vec2.div(v1, v2)
res = vec2.sub(v1, v2)
res = vec2.add(v1, v2)
res = vec2.mag_sqr(v)
res = vec2.mag(v)
res = vec2.negate(v)
res = vec2.max(v1, v2)
res = vec2.lerp(v1, v2, t)

vec3

-- res is a 1 or 0 depending on equality
res = vec3.equal(v1, v2)
-- res is a 1 or 0 depending on equality
res = vec3.not_equal(v1, v2)
res = vec3.mult(v1, v2)
res = vec3.scale(v, s)
res = vec3.div(v1, v2)
res = vec3.sub(v1, v2)
res = vec3.add(v1, v2)
res = vec3.mag_sqr(v)
res = vec3.mag(v)
res = vec3.negate(v)
res = vec3.cross(v1, v2)
res = vec3.dot(v1, v2)
res = vec3.reflect(v1, v2)
-- calculate the normal to a triangle defined by three points
res = vec3.normal(p1, p2, p3)
res = vec3.normalize(v)
res = vec3.max(v1, v2)
res = vec3.min(v1, v2)
res = vec3.lerp(v1, v2, t)
res = vec3.intersect_line_sphere(
  linepos1,
  linepos2,
  sphere_center,
  sphere_radius
)
res = vec3.axisx_from_quat(quat)
res = vec3.axisy_from_quat(quat)
res = vec3.axisz_from_quat(quat)
res = vec3.transform_axisangle(axis, angle, v)
res = vec3.mult_mat3(v, mat3)
res = vec3.centroid3(v1, v2, v3)
res = vec3.centroid4(v1, v2, v3, v4)

vec4

-- res is a 1 or 0 depending on equality
res = vec4.equal(v1, v2)
-- res is a 1 or 0 depending on equality
res = vec4.not_equal(v1, v2)
res = vec4.mult(v1, v2)
res = vec4.scale(v, s)
res = vec4.div(v1, v2)
res = vec4.sub(v1, v2)
res = vec4.add(v1, v2)
res = vec4.mag_sqr(v)
res = vec4.mag(v)
res = vec4.negate(v)
res = vec4.dot(v1, v2)
res = vec4.normalize(v)
res = vec4.max(v1, v2)
res = vec4.min(v1, v2)
res = vec4.lerp(v1, v2, t)
res = vec4.mult_mat4(v, mat4)

quat

-- res is a 1 or 0 depending on equality
res = quat.equal(q1, q2)
-- res is a 1 or 0 depending on equality
res = quat.not_equal(q1, q2)
res = quat.mult(q1, q2)
res = quat.scale(q, s)
res = quat.div(q1, q2)
res = quat.add(q1, q2)
res = quat.mag_sqr(q)
res = quat.mag(q)
res = quat.negate(q)
res = quat.dot(q1, q2)
res = quat.normalize(q)
res = quat.max(q1, q2)
res = quat.min(q1, q2)
res = quat.slerp(q1, q2, t)
res = quat.from_mat3(mat3)
res = quat.from_mat4(mat4)
res = quat.from_axis_angle(axis, angle)
res = quat.conj(q)
res = quat.from_euler(euler_angles)

mat3

res = mat3.add(m1, m2)
res = mat3.mult(m1, m2)
res = mat3.transpose(m)
res = mat3.mult_vec3(m, v)
res = mat3.from_axisangle(axis, angle)
res = mat3.from_uv(v1, v2)
res = mat3.determinant(m)
res = mat3.negate(m)
res = mat3.from_mat4(mat4)
res = mat3.from_quat(q)

mat4

res = mat4.add(m1, m2)
res = mat4.mult(m1, m2)
res = mat4.transpose(m)
res = mat4.mult_vec4(m, v)
res = mat4.from_axisangle(axis, angle)
res = mat4.from_uv(v1, v2)
res = mat4.determinant(m)
res = mat4.negate(m)
res = mat4.from_quat(q)
res = mat4.look_at(eye, center, up)
res = mat4.frustum(left, right, bottom, top, near, far)
res = mat4.perspective(fovy, aspect, near, far)
res = mat4.ortho(left, right, bottom, top, near, far)

See Also

Name Description
Lua in Max Lua in Max