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;
|
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>
|
template <typename T, std::size_t D>
|
||||||
vector<T, D> orthographic<T, D>::operator() (vector<T, D> v) const
|
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>
|
template <typename T, std::size_t D>
|
||||||
point<T, D> orthographic<T, D>::operator() (point<T, D> p) const
|
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>
|
template <typename T, std::size_t D>
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue