20 _normal = src._normal;
21 _distance = src._distance;
27 return Plane(_normal, _distance);
32 const float d0 = _normal.dot(start) + _distance;
33 const float d1 = _normal.dot(end) + _distance;
34 const float t = d0 / (d0 - d1);
35 const bool intersects = t >= 0.0f && t <= 1.0f;
36 if (intersects && point) {
37 *point = start + (end - start) * t;
44 const float denominator = _normal.dot(ray.
direction());
45 if (denominator == 0.0f) {
49 const float t = -(_normal.dot(ray.
origin()) + _distance) / denominator;
50 if (t >= 0.0f && point) {
58 const float invLength = 1.0f / _normal.length();
59 _normal = _normal * invLength;
60 _distance *= invLength;
74 _distance = -_normal.dot(point);
const Vector3 & normal() const
bool intersectsLine(const Vector3 &start, const Vector3 &end, Vector3 *point=nullptr) const
Plane & setFromPointNormal(const Vector3 &point, const Vector3 &normal)
bool intersectsRay(const Ray &ray, Vector3 *point=nullptr) const
Plane & set(float nx, float ny, float nz, float d)
Plane & copy(const Plane &src)
Infinite ray defined by origin and direction for raycasting and picking.
const Vector3 & origin() const
const Vector3 & direction() const
3D vector for positions, directions, and normals with multi-backend SIMD acceleration.