Planet
navi homePPSaboutscreenshotsdownloaddevelopmentforum

source: downloads/OgreMain/include/OgreRay.h @ 5

Last change on this file since 5 was 5, checked in by anonymous, 17 years ago

=hoffentlich gehts jetzt

File size: 4.4 KB
Line 
1/*
2-----------------------------------------------------------------------------
3This source file is part of OGRE
4    (Object-oriented Graphics Rendering Engine)
5For the latest info, see http://www.ogre3d.org/
6
7Copyright (c) 2000-2006 Torus Knot Software Ltd
8Also see acknowledgements in Readme.html
9
10This program is free software; you can redistribute it and/or modify it under
11the terms of the GNU Lesser General Public License as published by the Free Software
12Foundation; either version 2 of the License, or (at your option) any later
13version.
14
15This program is distributed in the hope that it will be useful, but WITHOUT
16ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
17FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details.
18
19You should have received a copy of the GNU Lesser General Public License along with
20this program; if not, write to the Free Software Foundation, Inc., 59 Temple
21Place - Suite 330, Boston, MA 02111-1307, USA, or go to
22http://www.gnu.org/copyleft/lesser.txt.
23
24You may alternatively use this source under the terms of a specific version of
25the OGRE Unrestricted License provided you have obtained such a license from
26Torus Knot Software Ltd.
27-----------------------------------------------------------------------------
28*/
29#ifndef __Ray_H_
30#define __Ray_H_
31
32// Precompiler options
33#include "OgrePrerequisites.h"
34
35#include "OgreVector3.h"
36#include "OgrePlaneBoundedVolume.h"
37
38namespace Ogre {
39
40    /** Representation of a ray in space, ie a line with an origin and direction. */
41    class _OgreExport 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
51        /** Sets the origin of the ray. */
52        void setOrigin(const Vector3& origin) {mOrigin = origin;} 
53        /** Gets the origin of the ray. */
54        const Vector3& getOrigin(void) const {return mOrigin;} 
55
56        /** Sets the direction of the ray. */
57        void setDirection(const Vector3& dir) {mDirection = dir;} 
58        /** Gets the direction of the ray. */
59        const Vector3& getDirection(void) const {return mDirection;} 
60
61                /** Gets the position of a point t units along the ray. */
62                Vector3 getPoint(Real t) const { 
63                        return Vector3(mOrigin + (mDirection * t));
64                }
65               
66                /** Gets the position of a point t units along the ray. */
67                Vector3 operator*(Real t) const { 
68                        return getPoint(t);
69                };
70
71                /** Tests whether this ray intersects the given plane.
72                @returns A pair structure where the first element indicates whether
73                        an intersection occurs, and if true, the second element will
74                        indicate the distance along the ray at which it intersects.
75                        This can be converted to a point in space by calling getPoint().
76                */
77                std::pair<bool, Real> intersects(const Plane& p) const
78                {
79                        return Math::intersects(*this, p);
80                }
81        /** Tests whether this ray intersects the given plane bounded volume.
82        @returns A pair structure where the first element indicates whether
83        an intersection occurs, and if true, the second element will
84        indicate the distance along the ray at which it intersects.
85        This can be converted to a point in space by calling getPoint().
86        */
87        std::pair<bool, Real> intersects(const PlaneBoundedVolume& p) const
88        {
89            return Math::intersects(*this, p.planes, p.outside == Plane::POSITIVE_SIDE);
90        }
91                /** Tests whether this ray intersects the given sphere.
92                @returns A pair structure where the first element indicates whether
93                        an intersection occurs, and if true, the second element will
94                        indicate the distance along the ray at which it intersects.
95                        This can be converted to a point in space by calling getPoint().
96                */
97                std::pair<bool, Real> intersects(const Sphere& s) const
98                {
99                        return Math::intersects(*this, s);
100                }
101                /** Tests whether this ray intersects the given box.
102                @returns A pair structure where the first element indicates whether
103                        an intersection occurs, and if true, the second element will
104                        indicate the distance along the ray at which it intersects.
105                        This can be converted to a point in space by calling getPoint().
106                */
107                std::pair<bool, Real> intersects(const AxisAlignedBox& box) const
108                {
109                        return Math::intersects(*this, box);
110                }
111
112    };
113
114}
115#endif
Note: See TracBrowser for help on using the repository browser.