geom/ray: remove constructors so we have a POD
This commit is contained in:
parent
ce246f8aa2
commit
a8b3737b8b
20
geom/ray.hpp
20
geom/ray.hpp
@ -27,22 +27,6 @@
|
||||
namespace util::geom {
|
||||
template <size_t S, typename T>
|
||||
struct ray {
|
||||
constexpr ray () = default;
|
||||
|
||||
constexpr ray (point<S,T> _origin, vector<S,T> _direction) noexcept:
|
||||
origin (_origin),
|
||||
direction (_direction)
|
||||
{
|
||||
CHECK (is_normalised (direction));
|
||||
}
|
||||
|
||||
constexpr ray (point<S,T> _origin, point <S,T> _distant) noexcept:
|
||||
ray (_origin, _origin.to (_distant ))
|
||||
{
|
||||
CHECK (is_normalised (direction));
|
||||
}
|
||||
|
||||
|
||||
// queries
|
||||
T closest (point<S,T>) const;
|
||||
|
||||
@ -80,6 +64,8 @@ namespace util::geom {
|
||||
constexpr T
|
||||
distance (const ray<S,T> r, const plane<S,T> p)
|
||||
{
|
||||
CHECK_SANITY (r);
|
||||
|
||||
return dot (p.coefficients, r.origin. template redim<S+1> (1)) /
|
||||
dot (p.coefficients, r.direction.template redim<S+1> (0));
|
||||
|
||||
@ -105,6 +91,8 @@ namespace util::geom {
|
||||
constexpr T
|
||||
distance (const ray<S,T> r, const aabb<S,T> b)
|
||||
{
|
||||
CHECK_SANITY (r);
|
||||
|
||||
const auto t1 = (b.lo - r.origin) / r.direction;
|
||||
const auto t2 = (b.hi - r.origin) / r.direction;
|
||||
|
||||
|
@ -1,7 +1,8 @@
|
||||
#include "../../geom/aabb.hpp"
|
||||
#include "../../geom/plane.hpp"
|
||||
#include "../../geom/ray.hpp"
|
||||
#include "../../tap.hpp"
|
||||
#include "geom/aabb.hpp"
|
||||
#include "geom/plane.hpp"
|
||||
#include "geom/ray.hpp"
|
||||
#include "geom/iostream.hpp"
|
||||
#include "tap.hpp"
|
||||
|
||||
using util::geom::ray2f;
|
||||
using util::geom::ray3f;
|
||||
@ -12,7 +13,7 @@ void
|
||||
test_intersect_plane (util::TAP::logger &tap)
|
||||
{
|
||||
// trivial case: origin ray facing z, plane at unit z facing -z.
|
||||
const util::geom::ray3f l (util::point3f {0,0,0}, util::vector3f {0,0, 1});
|
||||
const util::geom::ray3f l { .origin = 0, .direction = {0, 0, 1} };
|
||||
const util::geom::plane3f p (util::point3f {0,0,1}, util::vector3f {0,0,-1});
|
||||
|
||||
tap.expect_eq (distance (l, p), 1.f, "ray-plane intersect");
|
||||
|
Loading…
Reference in New Issue
Block a user