Fix orthographic transform applied to vectors & points
This commit is contained in:
parent
c1d9095327
commit
1b3c412102
2 changed files with 22 additions and 2 deletions
|
|
@ -42,4 +42,24 @@ namespace psemek::geom
|
|||
return result;
|
||||
}
|
||||
|
||||
template <typename T, std::size_t D>
|
||||
vector<T, D - 1> as_vector(vector<T, D> const & v)
|
||||
{
|
||||
static_assert(D > 1);
|
||||
vector<T, D - 1> result;
|
||||
for (std::size_t i = 0; i < D - 1; ++i)
|
||||
result[i] = v[i];
|
||||
return result;
|
||||
}
|
||||
|
||||
template <typename T, std::size_t D>
|
||||
point<T, D - 1> as_point(vector<T, D> const & v)
|
||||
{
|
||||
static_assert(D > 1);
|
||||
point<T, D - 1> result;
|
||||
for (std::size_t i = 0; i < D - 1; ++i)
|
||||
result[i] = v[i] / v[D - 1];
|
||||
return result;
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
|||
|
|
@ -64,13 +64,13 @@ namespace psemek::geom
|
|||
template <typename T, std::size_t D>
|
||||
vector<T, D> orthographic<T, D>::operator() (vector<T, D> v) const
|
||||
{
|
||||
return homogeneous_matrix() * homogeneous(v);
|
||||
return as_vector(homogeneous_matrix() * homogeneous(v));
|
||||
}
|
||||
|
||||
template <typename T, std::size_t D>
|
||||
point<T, D> orthographic<T, D>::operator() (point<T, D> p) const
|
||||
{
|
||||
return homogeneous_matrix() * homogeneous(p);
|
||||
return as_point(homogeneous_matrix() * homogeneous(p));
|
||||
}
|
||||
|
||||
template <typename T, std::size_t D>
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue