My Project
ParaRay.h
1 /*
2 -----------------------------------------------------------------------------
3 This source file is part of OGRE
4  (Object-oriented Graphics Rendering Engine)
5 For the latest info, see http://www.ogre3d.org/
6 
7 Copyright (c) 2000-2006 Torus Knot Software Ltd
8 Also see acknowledgements in Readme.html
9 
10 This program is free software; you can redistribute it and/or modify it under
11 the terms of the GNU Lesser General Public License as published by the Free Software
12 Foundation; either version 2 of the License, or (at your option) any later
13 version.
14 
15 This program is distributed in the hope that it will be useful, but WITHOUT
16 ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
17 FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details.
18 
19 You should have received a copy of the GNU Lesser General Public License along with
20 this program; if not, write to the Free Software Foundation, Inc., 59 Temple
21 Place - Suite 330, Boston, MA 02111-1307, USA, or go to
22 http://www.gnu.org/copyleft/lesser.txt.
23 
24 You may alternatively use this source under the terms of a specific version of
25 the OGRE Unrestricted License provided you have obtained such a license from
26 Torus Knot Software Ltd.
27 -----------------------------------------------------------------------------
28 */
29 #ifndef __Ray_H_
30 #define __Ray_H_
31 
32 // Precompiler options
33 
34 
35 #include "ParaVector3.h"
36 #include "ParaPlaneBoundedVolume.h"
37 
38 namespace ParaEngine {
39 
41  class Ray
42  {
43  protected:
44  Vector3 mOrigin;
45  Vector3 mDirection;
46  public:
47  Ray():mOrigin(Vector3::ZERO), mDirection(Vector3::UNIT_Z) {}
48  Ray(const Vector3& origin, const Vector3& direction)
49  :mOrigin(origin), mDirection(direction) {}
50 
52  void setOrigin(const Vector3& origin) {mOrigin = origin;}
54  const Vector3& getOrigin(void) const {return mOrigin;}
55 
57  void setDirection(const Vector3& dir) {mDirection = dir;}
59  const Vector3& getDirection(void) const {return mDirection;}
60 
62  Vector3 getPoint(float t) const {
63  return Vector3(mOrigin + (mDirection * t));
64  }
65 
67  Vector3 operator*(float t) const {
68  return getPoint(t);
69  };
70 
77  std::pair<bool, float> intersects(const Plane& p) const
78  {
79  return Math::intersects(*this, p);
80  }
87  std::pair<bool, float> intersects(const PlaneBoundedVolume& p) const
88  {
89  return Math::intersects(*this, p.planes, p.outside == Plane::POSITIVE_SIDE);
90  }
97  std::pair<bool, float> intersects(const Sphere& s) const
98  {
99  return Math::intersects(*this, s);
100  }
107  std::pair<bool, float> intersects(const AxisAlignedBox& box) const
108  {
109  return Math::intersects(*this, box);
110  }
111 
112  };
113 
114 }
115 #endif
std::pair< bool, float > intersects(const PlaneBoundedVolume &p) const
Tests whether this ray intersects the given plane bounded volume.
Definition: ParaRay.h:87
different physics engine has different winding order.
Definition: EventBinding.h:32
std::pair< bool, float > intersects(const Plane &p) const
Tests whether this ray intersects the given plane.
Definition: ParaRay.h:77
static std::pair< bool, float > intersects(const Ray &ray, const Plane &plane)
Ray / plane intersection, returns boolean result and distance.
Definition: ParaMath.cpp:316
std::pair< bool, float > intersects(const Sphere &s) const
Tests whether this ray intersects the given sphere.
Definition: ParaRay.h:97
A sphere primitive, mostly used for bounds checking.
Definition: ParaSphere.h:46
Standard 3-dimensional vector.
Definition: ParaVector3.h:16
Vector3 getPoint(float t) const
Gets the position of a point t units along the ray.
Definition: ParaRay.h:62
std::pair< bool, float > intersects(const AxisAlignedBox &box) const
Tests whether this ray intersects the given box.
Definition: ParaRay.h:107
Representation of a ray in space, i.e.
Definition: ParaRay.h:41
Defines a plane in 3D space.
Definition: ParaPlane.h:23
Represents a convex volume bounded by planes.
Definition: ParaPlaneBoundedVolume.h:43
const Vector3 & getOrigin(void) const
Gets the origin of the ray.
Definition: ParaRay.h:54
const Vector3 & getDirection(void) const
Gets the direction of the ray.
Definition: ParaRay.h:59
void setDirection(const Vector3 &dir)
Sets the direction of the ray.
Definition: ParaRay.h:57
Vector3 operator*(float t) const
Gets the position of a point t units along the ray.
Definition: ParaRay.h:67
A 3D box aligned with the x/y/z axes.
Definition: ParaAxisAlignedBox.h:16
void setOrigin(const Vector3 &origin)
Sets the origin of the ray.
Definition: ParaRay.h:52
PlaneList planes
Publicly accessible plane list, you can modify this direct.
Definition: ParaPlaneBoundedVolume.h:48