mat4 dualQuatToMatrix(vec4 Qn, vec4 Qd) { float len2 = Qn.dot(Qn); float w = Qn.w, x = Qn.x, y = Qn.y, z = Qn.z; float t0 = Qd.w, t1 = Qd.x, t2 = Qd.y, t3 = Qd.z; vec4 col0 = new vec4(w * w + x * x - y * y - z * z, 2 * x * y + 2 * w * z, 2 * x * z - 2 * w * y, 0) / len2; vec4 col1 = new vec4(2 * x * y - 2 * w * z, w * w + y * y - x * x - z * z, 2 * y * z + 2 * w * x, 0) / len2; vec4 col2 = new vec4(2 * x * z + 2 * w * y, 2 * y * z - 2 * w * x, w * w + z * z - x * x - y * y, 0) / len2; vec4 col3 = new vec4(-2 * t0 * x + 2 * w * t1 - 2 * t2 * z + 2 * y * t3, -2 * t0 * y + 2 * t1 * z - 2 * x * t3 + 2 * w * t2, -2 * t0 * z + 2 * x * t2 + 2 * w * t3 - 2 * t1 * y, len2) / len2; mat4 m = new mat4(col0, col1, col2, col3); return(m); }
public static float dot(vec4 v1, vec4 v2) { return(v1.dot(v2)); }