genesis-3d_engine/Engine/addons/vis/observercontext.h

166 lines
4.7 KiB
C
Raw Permalink Normal View History

/****************************************************************************
Copyright (c) 2010,Radon Labs GmbH
Copyright (c) 2011-2013,WebJet Business Division,CYOU
http://www.genesis-3d.com.cn
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in
all copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
THE SOFTWARE.
****************************************************************************/
#ifndef __observercontext_H__
#define __observercontext_H__
#include "core/refcounted.h"
#include "math/bbox.h"
//------------------------------------------------------------------------------
namespace Vis
{
class ObserverContext : public Core::RefCounted
{
__DeclareClass(ObserverContext);
public:
enum ObserverCullingType
{
ViewProjectionMatrix = 0, //
BoundingBox, //
SeeAll, //
InvalidObserverType
};
/// constructor
ObserverContext();
/// destructor
virtual ~ObserverContext();
/// get observer culling type
ObserverCullingType GetType() const;
ObserverCullingType* GetTypeRef();
/// ObserverCullingType = ProjectionMatrix
void Setup( const Math::matrix44& viewProj, const Math::point& observerPos);
/// ObserverCullingType = BoundingBox
void Setup( const Math::bbox& box, const Math::point& observerPos );
/// ObserverCullingType = SeeAll
void SetupSeeAll( const Math::point& observerPos );
/// get projection matrix
const Math::matrix44& GetViewProjectionMatrix(void) const;
Math::matrix44& GetViewProjectionMatrixRef(void);
/// get bbox
const Math::bbox& GetBoundingBox(void) const;
Math::bbox& GetBoundingBoxRef(void);
// get Observer Position
const Math::point& GetPosition(void) const;
void SetUserData( Core::RefCounted* userData );
const Core::RefCounted* GetUserData(void) const;
Math::ClipStatus::Type ComputeClipStatus(const Math::bbox& boundingBox);
protected:
Core::RefCounted* mUserData;
ObserverCullingType mType;
Math::bbox mBoundingBox;
Math::matrix44 mViewProjection;
Math::point mObserverPos;
};
//------------------------------------------------------------------------
inline
ObserverContext::ObserverCullingType
ObserverContext::GetType() const
{
return mType;
}
//------------------------------------------------------------------------
inline
ObserverContext::ObserverCullingType*
ObserverContext::GetTypeRef()
{
return &mType;
}
//------------------------------------------------------------------------
/// get projection matrix
inline
const Math::matrix44&
ObserverContext::GetViewProjectionMatrix() const
{
return mViewProjection;
}
//------------------------------------------------------------------------
inline
Math::matrix44&
ObserverContext::GetViewProjectionMatrixRef(void)
{
return mViewProjection;
}
//------------------------------------------------------------------------
/// get bbox
inline
const Math::bbox&
ObserverContext::GetBoundingBox() const
{
return mBoundingBox;
}
//------------------------------------------------------------------------
inline
Math::bbox&
ObserverContext::GetBoundingBoxRef(void)
{
return mBoundingBox;
}
//------------------------------------------------------------------------
// get Observer Position
inline
const Math::point&
ObserverContext::GetPosition() const
{
return mObserverPos;
}
//------------------------------------------------------------------------
inline
void
ObserverContext::SetUserData( Core::RefCounted* userData )
{
mUserData = userData;
}
//------------------------------------------------------------------------
inline
const Core::RefCounted*
ObserverContext::GetUserData(void) const
{
return mUserData;
}
} // namespace Vis
//------------------------------------------------------------------------------
#endif // __observercontext_H__