transformPoint method

DVVec3 transformPoint(
  1. DVVec3 p
)

p as a point: translated, and divided by w when this is a projection.

Implementation

DVVec3 transformPoint(DVVec3 p) {
  final Float64List m = storage;
  final double x = m[0] * p.x + m[4] * p.y + m[8] * p.z + m[12];
  final double y = m[1] * p.x + m[5] * p.y + m[9] * p.z + m[13];
  final double z = m[2] * p.x + m[6] * p.y + m[10] * p.z + m[14];
  final double w = m[3] * p.x + m[7] * p.y + m[11] * p.z + m[15];
  return w == 1 || w == 0 ? DVVec3(x, y, z) : DVVec3(x / w, y / w, z / w);
}