transformPoint method
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);
}