Kaynağa Gözat

Update matrix mult order

Daniele Bartolini 11 yıl önce
ebeveyn
işleme
6a8375e1a8
2 değiştirilmiş dosya ile 11 ekleme ve 11 silme
  1. 8 8
      engine/core/math/aabb.h
  2. 3 3
      engine/world/camera.cpp

+ 8 - 8
engine/core/math/aabb.h

@@ -158,14 +158,14 @@ namespace aabb
 		Vector3 vertices[8];
 		to_vertices(b, vertices);
 
-		vertices[0] = m * vertices[0];
-		vertices[1] = m * vertices[1];
-		vertices[2] = m * vertices[2];
-		vertices[3] = m * vertices[3];
-		vertices[4] = m * vertices[4];
-		vertices[5] = m * vertices[5];
-		vertices[6] = m * vertices[6];
-		vertices[7] = m * vertices[7];
+		vertices[0] = vertices[0] * m;
+		vertices[1] = vertices[1] * m;
+		vertices[2] = vertices[2] * m;
+		vertices[3] = vertices[3] * m;
+		vertices[4] = vertices[4] * m;
+		vertices[5] = vertices[5] * m;
+		vertices[6] = vertices[6] * m;
+		vertices[7] = vertices[7] * m;
 
 		AABB res;
 		reset(res);

+ 3 - 3
engine/world/camera.cpp

@@ -176,14 +176,14 @@ Vector3 Camera::screen_to_world(const Vector3& pos)
 
 	Matrix4x4 world_inv = world_pose();
 	invert(world_inv);
-	Matrix4x4 mvp = m_projection * world_inv;
+	Matrix4x4 mvp = world_inv * m_projection;
 	invert(mvp);
 
 	Vector4 ndc( (2 * (pos.x - 0)) / m_view_width - 1,
 				 (2 * (m_view_height - pos.y)) / m_view_height - 1,
 				 (2 * pos.z) - 1, 1);
 
-	Vector4 tmp = mvp * ndc;
+	Vector4 tmp = ndc * mvp;
 	tmp *= 1.0f / tmp.w;
 
 	return Vector3(tmp.x, tmp.y, tmp.z);
@@ -196,7 +196,7 @@ Vector3 Camera::world_to_screen(const Vector3& pos)
 	Matrix4x4 world_inv = world_pose();
 	invert(world_inv);
 
-	Vector3 ndc = (m_projection * world_inv) * pos;
+	Vector3 ndc = pos * (world_inv * m_projection);
 
 	return Vector3( (m_view_x + m_view_width * (ndc.x + 1.0f)) / 2.0f,
 					(m_view_y + m_view_height * (ndc.y + 1.0f)) / 2.0f,