source: OGRE/trunk/ogrenew/OgreMain/src/OgrePlane.cpp @ 657

Revision 657, 3.4 KB checked in by mattausch, 19 years ago (diff)

added ogre dependencies and patched ogre sources

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-2005 The OGRE Team
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-----------------------------------------------------------------------------
24*/
25#include "OgreStableHeaders.h"
26#include "OgrePlane.h"
27
28namespace Ogre {
29    //-----------------------------------------------------------------------
30    Plane::Plane ()
31    {
32        normal = Vector3::ZERO;
33        d = 0.0;
34    }
35    //-----------------------------------------------------------------------
36    Plane::Plane (const Plane& rhs)
37    {
38        normal = rhs.normal;
39        d = rhs.d;
40    }
41    //-----------------------------------------------------------------------
42    Plane::Plane (const Vector3& rkNormal, Real fConstant)
43    {
44        normal = rkNormal;
45        d = -fConstant;
46    }
47    //-----------------------------------------------------------------------
48    Plane::Plane (const Vector3& rkNormal, const Vector3& rkPoint)
49    {
50        normal = rkNormal;
51        d = -rkNormal.dotProduct(rkPoint);
52    }
53    //-----------------------------------------------------------------------
54    Plane::Plane (const Vector3& rkPoint0, const Vector3& rkPoint1,
55        const Vector3& rkPoint2)
56    {
57        redefine(rkPoint0, rkPoint1, rkPoint2);
58    }
59    //-----------------------------------------------------------------------
60    Real Plane::getDistance (const Vector3& rkPoint) const
61    {
62        return normal.dotProduct(rkPoint) + d;
63    }
64    //-----------------------------------------------------------------------
65    Plane::Side Plane::getSide (const Vector3& rkPoint) const
66    {
67        Real fDistance = getDistance(rkPoint);
68
69        if ( fDistance < 0.0 )
70            return Plane::NEGATIVE_SIDE;
71
72        if ( fDistance > 0.0 )
73            return Plane::POSITIVE_SIDE;
74
75        return Plane::NO_SIDE;
76    }
77    //-----------------------------------------------------------------------
78    void Plane::redefine(const Vector3& rkPoint0, const Vector3& rkPoint1,
79        const Vector3& rkPoint2)
80    {
81        Vector3 kEdge1 = rkPoint1 - rkPoint0;
82        Vector3 kEdge2 = rkPoint2 - rkPoint0;
83        normal = kEdge1.crossProduct(kEdge2);
84        normal.normalise();
85        d = -normal.dotProduct(rkPoint0);
86    }
87    //-----------------------------------------------------------------------
88    std::ostream& operator<< (std::ostream& o, Plane& p)
89    {
90        o << "Plane(normal=" << p.normal << ", d=" << p.d << ")";
91        return o;
92    }
93} // namespace Ogre
Note: See TracBrowser for help on using the repository browser.