From 1b3c412102ec7d36b6eed980eb3dc3a6f4e27f68 Mon Sep 17 00:00:00 2001 From: lisyarus Date: Wed, 21 Oct 2020 22:26:12 +0300 Subject: [PATCH] Fix orthographic transform applied to vectors & points --- libs/geom/include/psemek/geom/homogeneous.hpp | 20 +++++++++++++++++++ .../geom/include/psemek/geom/orthographic.hpp | 4 ++-- 2 files changed, 22 insertions(+), 2 deletions(-) diff --git a/libs/geom/include/psemek/geom/homogeneous.hpp b/libs/geom/include/psemek/geom/homogeneous.hpp index 137576f3..cce0b495 100644 --- a/libs/geom/include/psemek/geom/homogeneous.hpp +++ b/libs/geom/include/psemek/geom/homogeneous.hpp @@ -42,4 +42,24 @@ namespace psemek::geom return result; } + template + vector as_vector(vector const & v) + { + static_assert(D > 1); + vector result; + for (std::size_t i = 0; i < D - 1; ++i) + result[i] = v[i]; + return result; + } + + template + point as_point(vector const & v) + { + static_assert(D > 1); + point result; + for (std::size_t i = 0; i < D - 1; ++i) + result[i] = v[i] / v[D - 1]; + return result; + } + } diff --git a/libs/geom/include/psemek/geom/orthographic.hpp b/libs/geom/include/psemek/geom/orthographic.hpp index b3cd224b..0748008c 100644 --- a/libs/geom/include/psemek/geom/orthographic.hpp +++ b/libs/geom/include/psemek/geom/orthographic.hpp @@ -64,13 +64,13 @@ namespace psemek::geom template vector orthographic::operator() (vector v) const { - return homogeneous_matrix() * homogeneous(v); + return as_vector(homogeneous_matrix() * homogeneous(v)); } template point orthographic::operator() (point p) const { - return homogeneous_matrix() * homogeneous(p); + return as_point(homogeneous_matrix() * homogeneous(p)); } template