Matrix Quaternion::buildMatrix() const { float w = p[0]; float x = p[1]; float y = p[2]; float z = p[3]; return Matrix( 1.0f-2.0f*y*y-2.0f*z*z, 2.0f*x*y-2.0f*w*z, 2.0f*x*z + 2.0f*w*y, 0.0f, 2.0f*x*y + 2.0f*w*z, 1.0f - 2.0f*x*x - 2.0f*z*z, 2.0f*y*z - 2.0f*w*x, 0.0f, 2.0f*x*z - 2.0f*w*y, 2.0f*y*z + 2.0f*w*x, 1.0f - 2.0f*x*x - 2.0f*y*y, 0.0f, 0.0f,0.0f,0.0f,1.0f ); }