summaryrefslogtreecommitdiff
path: root/common
diff options
context:
space:
mode:
authorleo2006-02-19 23:05:42 +0000
committerleo2006-02-19 23:05:42 +0000
commitb3109b9851b1be77bddb0dc3dcdd815fe11bd352 (patch)
tree28c5bcc0a63f1c8b62ce0636be706c4b77156bc0 /common
parentcf9f6693ab964e660f816c0245365acdfdfec769 (diff)
Fixed wrong multiply in ProjectPoint().
git-svn-id: http://svn.leocad.org/trunk@485 c7d43263-9d01-0410-8a33-9dba5d9f93d6
Diffstat (limited to 'common')
-rw-r--r--common/algebra.cpp19
-rw-r--r--common/algebra.h1
2 files changed, 19 insertions, 1 deletions
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]);