improve mat44 implementation

this will make it easier to create matrices of different sizes

Change-Id: I2c1771ba0823c42d737762e2dfc2cd47eb302767
diff --git a/include/ui/vec3.h b/include/ui/vec3.h
index 591b8b2..dde59a9 100644
--- a/include/ui/vec3.h
+++ b/include/ui/vec3.h
@@ -26,7 +26,8 @@
 // -------------------------------------------------------------------------------------
 
 template <typename T>
-class tvec3 :   public TVecArithmeticOperators<tvec3, T>,
+class tvec3 :   public TVecProductOperators<tvec3, T>,
+                public TVecAddOperators<tvec3, T>,
                 public TVecUnaryOperators<tvec3, T>,
                 public TVecComparisonOperators<tvec3, T>,
                 public TVecFunctions<tvec3, T>
@@ -78,6 +79,12 @@
     template<typename A>
     explicit tvec3(const tvec3<A>& v) : x(v.x), y(v.y), z(v.z) { }
 
+    template<typename A>
+    tvec3(const Impersonator< tvec3<A> >& v)
+        : x(((const tvec3<A>&)v).x),
+          y(((const tvec3<A>&)v).y),
+          z(((const tvec3<A>&)v).z) { }
+
     template<typename A, typename B>
     tvec3(const Impersonator< tvec2<A> >& v, B z)
         : x(((const tvec2<A>&)v).x),