| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566 |
- $#include "Ray.h"
- /// Infinite straight line in three-dimensional space.
- class Ray
- {
- public:
- /// Construct undefined.
- Ray()
- {
- }
-
- /// Construct from origin and direction. The direction must be normalized.
- Ray(const Vector3& origin, const Vector3& direction) :
- origin_(origin),
- direction_(direction)
- {
- }
-
- /// Copy-construct from another ray.
- Ray(const Ray& ray) :
- origin_(ray.origin_),
- direction_(ray.direction_)
- {
- }
-
- /// Check for equality with another ray.
- bool operator == (const Ray& rhs) const { return origin_ == rhs.origin_ && direction_ == rhs.direction_; }
-
- /// Define from origin and direction. The direction will be normalized.
- void Define(const Vector3& origin, const Vector3& direction)
- {
- origin_ = origin;
- direction_ = direction.Normalized();
- }
-
- /// Project a point on the ray.
- Vector3 Project(const Vector3& point) const;
- /// Return distance of a point from the ray
- float Distance(const Vector3& point) const;
- /// Return closest point to another ray.
- Vector3 ClosestPoint(const Ray& ray) const;
- /// Return hit distance to a plane, or infinity if no hit.
- float HitDistance(const Plane& plane) const;
- /// Return hit distance to a bounding box, or infinity if no hit.
- float HitDistance(const BoundingBox& box) const;
- /// Return hit distance to a frustum, or infinity if no hit. If solidInside parameter is true (default) rays originating from inside return zero distance, otherwise the distance to the closest plane.
- float HitDistance(const Frustum& frustum, bool solidInside = true) const;
- /// Return hit distance to a sphere, or infinity if no hit.
- float HitDistance(const Sphere& sphere) const;
- /// Return hit distance to a triangle, or infinity if no hit.
- float HitDistance(const Vector3& v0, const Vector3& v1, const Vector3& v2) const;
- /// Return hit distance to non-indexed geometry data, or infinity if no hit.
- float HitDistance(const void* vertexData, unsigned vertexSize, unsigned vertexStart, unsigned vertexCount) const;
- /// Return hit distance to indexed geometry data, or infinity if no hit.
- float HitDistance(const void* vertexData, unsigned vertexSize, const void* indexData, unsigned indexSize, unsigned indexStart, unsigned indexCount) const;
- /// Return whether ray is inside non-indexed geometry.
- bool InsideGeometry(const void* vertexData, unsigned vertexSize, unsigned vertexStart, unsigned vertexCount) const;
- /// Return whether ray is inside indexed geometry.
- bool InsideGeometry(const void* vertexData, unsigned vertexSize, const void* indexData, unsigned indexSize, unsigned indexStart, unsigned indexCount) const;
-
- /// Ray origin.
- Vector3 origin_ @ origin;
-
- /// Ray direction.
- Vector3 direction_ @ direction;
- };
|