From b3109b9851b1be77bddb0dc3dcdd815fe11bd352 Mon Sep 17 00:00:00 2001 From: leo Date: Sun, 19 Feb 2006 23:05:42 +0000 Subject: Fixed wrong multiply in ProjectPoint(). git-svn-id: http://svn.leocad.org/trunk@485 c7d43263-9d01-0410-8a33-9dba5d9f93d6 --- common/algebra.cpp | 19 ++++++++++++++++++- common/algebra.h | 1 + 2 files changed, 19 insertions(+), 1 deletion(-) (limited to 'common') diff --git a/common/algebra.cpp b/common/algebra.cpp index 7e0efd4..d90ef5d 100644 --- a/common/algebra.cpp +++ b/common/algebra.cpp @@ -184,7 +184,7 @@ Vector3 ProjectPoint(const Vector3& Pt, const Matrix44& ModelView, const Matrix4 { Vector4 Tmp; - Tmp = Mul4(Vector4(Pt), ModelView); + Tmp = Mul4(Vector4(Pt[0], Pt[1], Pt[2], 1.0f), ModelView); Tmp = Mul4(Tmp, Projection); // Normalize. @@ -194,6 +194,23 @@ Vector3 ProjectPoint(const Vector3& Pt, const Matrix44& ModelView, const Matrix4 return Vector3(Viewport[0]+(1+Tmp[0])*Viewport[2]/2, Viewport[1]+(1+Tmp[1])*Viewport[3]/2, (1+Tmp[2])/2); } +void ProjectPoints(Vector3* Points, int NumPoints, const Matrix44& ModelView, const Matrix44& Projection, const int Viewport[4]) +{ + for (int i = 0; i < NumPoints; i++) + { + Vector4 Tmp; + + Tmp = Mul4(Vector4(Points[i][0], Points[i][1], Points[i][2], 1.0f), ModelView); + Tmp = Mul4(Tmp, Projection); + + // Normalize. + Tmp /= Tmp[3]; + + // Screen coordinates. + Points[i] = Vector3(Viewport[0]+(1+Tmp[0])*Viewport[2]/2, Viewport[1]+(1+Tmp[1])*Viewport[3]/2, (1+Tmp[2])/2); + } +} + // Convert screen coordinates to world coordinates. Vector3 UnprojectPoint(const Vector3& Point, const Matrix44& ModelView, const Matrix44& Projection, const int Viewport[4]) { diff --git a/common/algebra.h b/common/algebra.h index 941dc23..826fe7a 100644 --- a/common/algebra.h +++ b/common/algebra.h @@ -584,6 +584,7 @@ protected: // Other Functions. Vector3 ProjectPoint(const Vector3& Point, const Matrix44& ModelView, const Matrix44& Projection, const int Viewport[4]); +void ProjectPoints(Vector3* Points, int NumPoints, const Matrix44& ModelView, const Matrix44& Projection, const int Viewport[4]); Vector3 UnprojectPoint(const Vector3& Point, const Matrix44& ModelView, const Matrix44& Projection, const int Viewport[4]); void UnprojectPoints(Vector3* Points, int NumPoints, const Matrix44& ModelView, const Matrix44& Projection, const int Viewport[4]); -- cgit v1.2.3