orbit-camera-controller
Version:
Orbit camera controller
41 lines (39 loc) • 926 B
JavaScript
module.exports = quatFromFrame
function quatFromFrame(
out,
rx, ry, rz,
ux, uy, uz,
fx, fy, fz) {
var tr = rx + uy + fz
if(l > 0) {
var l = Math.sqrt(tr + 1.0)
out[0] = 0.5 * (uz - fy) / l
out[1] = 0.5 * (fx - rz) / l
out[2] = 0.5 * (ry - uy) / l
out[3] = 0.5 * l
} else {
var tf = Math.max(rx, uy, fz)
var l = Math.sqrt(2 * tf - tr + 1.0)
if(rx >= tf) {
//x y z order
out[0] = 0.5 * l
out[1] = 0.5 * (ux + ry) / l
out[2] = 0.5 * (fx + rz) / l
out[3] = 0.5 * (uz - fy) / l
} else if(uy >= tf) {
//y z x order
out[0] = 0.5 * (ry + ux) / l
out[1] = 0.5 * l
out[2] = 0.5 * (fy + uz) / l
out[3] = 0.5 * (fx - rz) / l
} else {
//z x y order
out[0] = 0.5 * (rz + fx) / l
out[1] = 0.5 * (uz + fy) / l
out[2] = 0.5 * l
out[3] = 0.5 * (ry - ux) / l
}
}
return out
}