瀏覽代碼

Add Mat4::Mat4(Quat, Vec3)

Daniele Bartolini 12 年之前
父節點
當前提交
73144604ea
共有 2 個文件被更改,包括 33 次插入1 次删除
  1. 26 0
      engine/core/math/Mat4.cpp
  2. 7 1
      engine/core/math/Mat4.h

+ 26 - 0
engine/core/math/Mat4.cpp

@@ -65,6 +65,32 @@ Mat4::Mat4(float r1c1, float r2c1, float r3c1, float r4c1, float r1c2, float r2c
 	m[15] = r4c4;
 }
 
+//-----------------------------------------------------------------------------
+Mat4::Mat4(const Quat& r, const Vec3& p)
+{
+	const float& rx = r.v.x;
+	const float& ry = r.v.y;
+	const float& rz = r.v.z;
+	const float& rw = r.w;
+
+	m[0] = 1.0 - 2.0 * ry * ry - 2.0 * rz * rz;
+	m[1] = 2.0 * rx * ry + 2.0 * rw * rz;
+	m[2] = 2.0 * rx * rz - 2.0 * rw * ry;
+	m[3] = 0;
+	m[4] = 2.0 * rx * ry - 2.0 * rw * rz;
+	m[5] = 1.0 - 2.0 * rx * rx - 2.0 * rz * rz;
+	m[6] = 2.0 * ry * rz + 2.0 * rw * rx;
+	m[7] = 0.0;
+	m[8] = 2.0 * rx * rz + 2.0 * rw * ry;
+	m[9] = 2.0 * ry * rz - 2.0 * rw * rx;
+	m[10] = 1.0 - 2.0 * rx * rx - 2.0 * ry * ry;
+	m[11] = 0.0;
+	m[12] = p.x;
+	m[13] = p.y;
+	m[14] = p.z;
+	m[15] = 1.0;
+}
+
 //-----------------------------------------------------------------------------
 Mat4::Mat4(const float v[16])
 {

+ 7 - 1
engine/core/math/Mat4.h

@@ -69,7 +69,13 @@ public:
 						Mat4();	
 
 	/// Constructs from a set of float
-						Mat4(float r1c1, float r2c1, float r3c1, float r4c1, float r1c2, float r2c2, float r3c2, float r4c2, float r1c3, float r2c3, float r3c3, float r4c3, float r1c4, float r2c4, float r3c4, float r4c4);
+						Mat4(float r1c1, float r2c1, float r3c1, float r4c1,
+								float r1c2, float r2c2, float r3c2, float r4c2,
+								float r1c3, float r2c3, float r3c3, float r4c3,
+								float r1c4, float r2c4, float r3c4, float r4c4);
+
+	/// Constructs from rotation @a r and position @a p.
+						Mat4(const Quat& r, const Vec3& p);
 	
 	/// Contructs from the @a v array
 						Mat4(const float v[16]);