Main Page   Namespace List   Class Hierarchy   Alphabetical List   Compound List   File List   Namespace Members   Compound Members   File Members   Related Pages  

OgreMovablePlane.cpp

Go to the documentation of this file.
00001 /*
00002 -----------------------------------------------------------------------------
00003 This source file is part of OGRE
00004 (Object-oriented Graphics Rendering Engine)
00005 For the latest info, see http://www.ogre3d.org/
00006 
00007 Copyright © 2000-2004 The OGRE Team
00008 Also see acknowledgements in Readme.html
00009 
00010 This program is free software; you can redistribute it and/or modify it under
00011 the terms of the GNU Lesser General Public License as published by the Free Software
00012 Foundation; either version 2 of the License, or (at your option) any later
00013 version.
00014 
00015 This program is distributed in the hope that it will be useful, but WITHOUT
00016 ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
00017 FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details.
00018 
00019 You should have received a copy of the GNU Lesser General Public License along with
00020 this program; if not, write to the Free Software Foundation, Inc., 59 Temple
00021 Place - Suite 330, Boston, MA 02111-1307, USA, or go to
00022 http://www.gnu.org/copyleft/lesser.txt.
00023 -----------------------------------------------------------------------------
00024 */
00025 #include "OgreStableHeaders.h"
00026 #include "OgreMovablePlane.h"
00027 #include "OgreNode.h"
00028 
00029 namespace Ogre {
00030 
00031     String MovablePlane::msMovableType = "MovablePlane";
00032     //-----------------------------------------------------------------------
00033     //-----------------------------------------------------------------------
00034     MovablePlane::MovablePlane(const String& name) : Plane(),
00035         mName(name),
00036         mLastTranlate(Vector3::ZERO), 
00037         mLastRotate(Quaternion::IDENTITY),
00038         mDirty(true)
00039     {
00040     }
00041     //-----------------------------------------------------------------------
00042     MovablePlane::MovablePlane (const Plane& rhs) : Plane(rhs), 
00043         mLastTranlate(Vector3::ZERO), mLastRotate(Quaternion::IDENTITY), 
00044         mDirty(true)
00045     {
00046     }
00047     //-----------------------------------------------------------------------
00048     MovablePlane::MovablePlane (const Vector3& rkNormal, Real fConstant)
00049         : Plane (rkNormal, fConstant), mLastTranlate(Vector3::ZERO), 
00050         mLastRotate(Quaternion::IDENTITY), mDirty(true)
00051     {
00052     }
00053     //-----------------------------------------------------------------------
00054     MovablePlane::MovablePlane (const Vector3& rkNormal, const Vector3& rkPoint)
00055         : Plane(rkNormal, rkPoint), mLastTranlate(Vector3::ZERO), 
00056         mLastRotate(Quaternion::IDENTITY), mDirty(true)
00057     {
00058     }
00059     //-----------------------------------------------------------------------
00060     MovablePlane::MovablePlane (const Vector3& rkPoint0, const Vector3& rkPoint1,
00061         const Vector3& rkPoint2)
00062         : Plane(rkPoint0, rkPoint1, rkPoint2), mLastTranlate(Vector3::ZERO), 
00063         mLastRotate(Quaternion::IDENTITY), mDirty(true)
00064     {
00065     }
00066     //-----------------------------------------------------------------------
00067     const Plane& MovablePlane::_getDerivedPlane(void) const
00068     {
00069         if (mParentNode)
00070         {
00071             if (mDirty ||
00072                 !(mParentNode->_getDerivedOrientation() == mLastRotate &&
00073                 mParentNode->_getDerivedPosition() == mLastTranlate))
00074             {
00075                 mLastRotate = mParentNode->_getDerivedOrientation();
00076                 mLastTranlate = mParentNode->_getDerivedPosition();
00077                 // Rotate normal
00078                 mDerivedPlane.normal = mLastRotate * normal;
00079                 // d remains the same in rotation, since rotation happens first
00080                 mDerivedPlane.d = d;
00081                 // Add on the effect of the translation (project onto new normal)
00082                 mDerivedPlane.d -= mDerivedPlane.normal.dotProduct(mLastTranlate);
00083 
00084                 mDirty = false;
00085 
00086             }
00087         }
00088         else
00089         {
00090             return *this;
00091         }
00092 
00093         return mDerivedPlane;
00094     }
00095     //-----------------------------------------------------------------------
00096     const String& MovablePlane::getName(void) const
00097     {
00098         return mName;
00099     }
00100     //-----------------------------------------------------------------------
00101     const String& MovablePlane::getMovableType(void) const
00102     {
00103         return msMovableType;
00104     }
00105 }

Copyright © 2002-2003 by The OGRE Team
Last modified Sun Nov 28 19:48:36 2004