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

Revision 657, 4.2 KB checked in by mattausch, 18 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 "OgreMovablePlane.h"
27#include "OgreNode.h"
28
29namespace Ogre {
30
31    String MovablePlane::msMovableType = "MovablePlane";
32    //-----------------------------------------------------------------------
33    //-----------------------------------------------------------------------
34    MovablePlane::MovablePlane(const String& name) : Plane(),
35        mName(name),
36        mLastTranslate(Vector3::ZERO),
37        mLastRotate(Quaternion::IDENTITY),
38        mDirty(true)
39    {
40    }
41    //-----------------------------------------------------------------------
42    MovablePlane::MovablePlane (const Plane& rhs) : Plane(rhs),
43        mLastTranslate(Vector3::ZERO), mLastRotate(Quaternion::IDENTITY),
44        mDirty(true)
45    {
46    }
47    //-----------------------------------------------------------------------
48    MovablePlane::MovablePlane (const Vector3& rkNormal, Real fConstant)
49        : Plane (rkNormal, fConstant), mLastTranslate(Vector3::ZERO),
50        mLastRotate(Quaternion::IDENTITY), mDirty(true)
51    {
52    }
53    //-----------------------------------------------------------------------
54    MovablePlane::MovablePlane (const Vector3& rkNormal, const Vector3& rkPoint)
55        : Plane(rkNormal, rkPoint), mLastTranslate(Vector3::ZERO),
56        mLastRotate(Quaternion::IDENTITY), mDirty(true)
57    {
58    }
59    //-----------------------------------------------------------------------
60    MovablePlane::MovablePlane (const Vector3& rkPoint0, const Vector3& rkPoint1,
61        const Vector3& rkPoint2)
62        : Plane(rkPoint0, rkPoint1, rkPoint2), mLastTranslate(Vector3::ZERO),
63        mLastRotate(Quaternion::IDENTITY), mDirty(true)
64    {
65    }
66    //-----------------------------------------------------------------------
67    const Plane& MovablePlane::_getDerivedPlane(void) const
68    {
69        if (mParentNode)
70        {
71            if (mDirty ||
72                !(mParentNode->_getDerivedOrientation() == mLastRotate &&
73                mParentNode->_getDerivedPosition() == mLastTranslate))
74            {
75                mLastRotate = mParentNode->_getDerivedOrientation();
76                mLastTranslate = mParentNode->_getDerivedPosition();
77                // Rotate normal
78                mDerivedPlane.normal = mLastRotate * normal;
79                // d remains the same in rotation, since rotation happens first
80                mDerivedPlane.d = d;
81                // Add on the effect of the translation (project onto new normal)
82                mDerivedPlane.d -= mDerivedPlane.normal.dotProduct(mLastTranslate);
83
84                mDirty = false;
85
86            }
87        }
88        else
89        {
90            return *this;
91        }
92
93        return mDerivedPlane;
94    }
95    //-----------------------------------------------------------------------
96    const String& MovablePlane::getName(void) const
97    {
98        return mName;
99    }
100    //-----------------------------------------------------------------------
101    const String& MovablePlane::getMovableType(void) const
102    {
103        return msMovableType;
104    }
105}
Note: See TracBrowser for help on using the repository browser.