OGRE  1.9.0
OgreFrustum.h
Go to the documentation of this file.
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-2014 Torus Knot Software Ltd
8
9Permission is hereby granted, free of charge, to any person obtaining a copy
10of this software and associated documentation files (the "Software"), to deal
11in the Software without restriction, including without limitation the rights
12to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
13copies of the Software, and to permit persons to whom the Software is
14furnished to do so, subject to the following conditions:
15
16The above copyright notice and this permission notice shall be included in
17all copies or substantial portions of the Software.
18
19THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
20IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
21FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
22AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
23LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
24OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
25THE SOFTWARE.
26-----------------------------------------------------------------------------
27*/
28#ifndef __Frustum_H__
29#define __Frustum_H__
30
31#include "OgrePrerequisites.h"
32#include "OgreMovableObject.h"
33#include "OgreRenderable.h"
34#include "OgreAxisAlignedBox.h"
35#include "OgreVertexIndexData.h"
36#include "OgreMovablePlane.h"
37#include "OgreHeaderPrefix.h"
38
39namespace Ogre
40{
60
68
80
86 {
87 protected:
90
105
107 mutable Plane mFrustumPlanes[6];
108
112
122 mutable bool mRecalcFrustum;
124 mutable bool mRecalcView;
130 mutable bool mRecalcVertexData;
138 mutable Real mLeft, mRight, mTop, mBottom;
141
142 // Internal functions for calcs
143 virtual void calcProjectionParameters(Real& left, Real& right, Real& bottom, Real& top) const;
145 virtual void updateFrustum(void) const;
147 virtual void updateView(void) const;
149 virtual void updateFrustumImpl(void) const;
151 virtual void updateViewImpl(void) const;
152 virtual void updateFrustumPlanes(void) const;
154 virtual void updateFrustumPlanesImpl(void) const;
155 virtual void updateWorldSpaceCorners(void) const;
157 virtual void updateWorldSpaceCornersImpl(void) const;
158 virtual void updateVertexData(void) const;
159 virtual bool isViewOutOfDate(void) const;
160 virtual bool isFrustumOutOfDate(void) const;
162 virtual void invalidateFrustum(void) const;
164 virtual void invalidateView(void) const;
165
168
171
173 mutable Vector3 mWorldSpaceCorners[8];
174
185
194
195 public:
196
198 Frustum(const String& name = StringUtil::BLANK);
199
200 virtual ~Frustum();
213 virtual void setFOVy(const Radian& fovy);
214
217 virtual const Radian& getFOVy(void) const;
218
230 virtual void setNearClipDistance(Real nearDist);
231
234 virtual Real getNearClipDistance(void) const;
235
256 virtual void setFarClipDistance(Real farDist);
257
260 virtual Real getFarClipDistance(void) const;
261
270 virtual void setAspectRatio(Real ratio);
271
274 virtual Real getAspectRatio(void) const;
275
287 virtual void setFrustumOffset(const Vector2& offset);
288
302 virtual void setFrustumOffset(Real horizontal = 0.0, Real vertical = 0.0);
303
306 virtual const Vector2& getFrustumOffset() const;
307
312 virtual void setFocalLength(Real focalLength = 1.0);
313
316 virtual Real getFocalLength() const;
317
322 virtual void setFrustumExtents(Real left, Real right, Real top, Real bottom);
324 virtual void resetFrustumExtents();
326 virtual void getFrustumExtents(Real& outleft, Real& outright, Real& outtop, Real& outbottom) const;
327
328
337 virtual const Matrix4& getProjectionMatrixRS(void) const;
349 virtual const Matrix4& getProjectionMatrixWithRSDepth(void) const;
359 virtual const Matrix4& getProjectionMatrix(void) const;
360
363 virtual const Matrix4& getViewMatrix(void) const;
364
369 virtual void calcViewMatrixRelative(const Vector3& relPos, Matrix4& matToUpdate) const;
370
388 virtual void setCustomViewMatrix(bool enable,
389 const Matrix4& viewMatrix = Matrix4::IDENTITY);
391 virtual bool isCustomViewMatrixEnabled(void) const
392 { return mCustomViewMatrix; }
393
415 virtual void setCustomProjectionMatrix(bool enable,
416 const Matrix4& projectionMatrix = Matrix4::IDENTITY);
418 virtual bool isCustomProjectionMatrixEnabled(void) const
419 { return mCustomProjMatrix; }
420
425 virtual const Plane* getFrustumPlanes(void) const;
426
431 virtual const Plane& getFrustumPlane( unsigned short plane ) const;
432
444 virtual bool isVisible(const AxisAlignedBox& bound, FrustumPlane* culledBy = 0) const;
445
457 virtual bool isVisible(const Sphere& bound, FrustumPlane* culledBy = 0) const;
458
470 virtual bool isVisible(const Vector3& vert, FrustumPlane* culledBy = 0) const;
471
473 uint32 getTypeFlags(void) const;
474
476 const AxisAlignedBox& getBoundingBox(void) const;
477
480
483
485 const String& getMovableType(void) const;
486
489
491 const MaterialPtr& getMaterial(void) const;
492
495
497 void getWorldTransforms(Matrix4* xform) const;
498
500 Real getSquaredViewDepth(const Camera* cam) const;
501
503 const LightList& getLights(void) const;
504
511 virtual const Vector3* getWorldSpaceCorners(void) const;
512
516
520
531 virtual void setOrthoWindow(Real w, Real h);
537 virtual void setOrthoWindowHeight(Real h);
543 virtual void setOrthoWindowWidth(Real w);
546 virtual Real getOrthoWindowHeight() const;
550 virtual Real getOrthoWindowWidth() const;
551
557 virtual void enableReflection(const Plane& p);
566 virtual void enableReflection(const MovablePlane* p);
567
569 virtual void disableReflection(void);
570
572 virtual bool isReflected(void) const { return mReflect; }
574 virtual const Matrix4& getReflectionMatrix(void) const { return mReflectMatrix; }
576 virtual const Plane& getReflectionPlane(void) const { return mReflectPlane; }
577
595 virtual bool projectSphere(const Sphere& sphere,
596 Real* left, Real* top, Real* right, Real* bottom) const;
597
598
625 virtual void enableCustomNearClipPlane(const MovablePlane* plane);
647 virtual void enableCustomNearClipPlane(const Plane& plane);
649 virtual void disableCustomNearClipPlane(void);
651 virtual bool isCustomNearClipPlaneEnabled(void) const
652 { return mObliqueDepthProjection; }
653
656 bool debugRenderables = false);
657
660
662 virtual const Vector3& getPositionForViewUpdate(void) const;
664 virtual const Quaternion& getOrientationForViewUpdate(void) const;
665
674 void setOrientationMode(OrientationMode orientationMode);
675
682
683 };
684
688} // namespace Ogre
689
690#include "OgreHeaderSuffix.h"
691
692#endif // __Frustum_H__
#define _OgreExport
A 3D box aligned with the x/y/z axes.
A viewpoint from which the scene will be rendered.
Definition OgreCamera.h:87
A frustum represents a pyramid, capped at the near and far end which is used to represent either a vi...
Definition OgreFrustum.h:86
Plane mLastLinkedReflectionPlane
Record of the last world-space reflection plane info used.
void _updateRenderQueue(RenderQueue *queue)
Overridden from MovableObject.
Real mOrthoHeight
Ortho height size (world units)
virtual void setFrustumOffset(Real horizontal=0.0, Real vertical=0.0)
Sets frustum offsets, used in stereo rendering.
virtual void setCustomProjectionMatrix(bool enable, const Matrix4 &projectionMatrix=Matrix4::IDENTITY)
Set whether to use a custom projection matrix on this frustum.
virtual bool isVisible(const AxisAlignedBox &bound, FrustumPlane *culledBy=0) const
Tests whether the given container is visible in the Frustum.
virtual bool isCustomViewMatrixEnabled(void) const
Returns whether a custom view matrix is in use.
virtual Real getAspectRatio(void) const
Retrieves the current aspect ratio.
void getWorldTransforms(Matrix4 *xform) const
Overridden from Renderable.
virtual void enableCustomNearClipPlane(const MovablePlane *plane)
Links the frustum to a custom near clip plane, which can be used to clip geometry in a custom manner ...
void setOrientationMode(OrientationMode orientationMode)
Set the orientation mode of the frustum.
virtual void updateVertexData(void) const
virtual void enableCustomNearClipPlane(const Plane &plane)
Links the frustum to a custom near clip plane, which can be used to clip geometry in a custom manner ...
Real mFocalLength
Focal length of frustum (for stereo rendering, defaults to 1.0)
Plane mLastLinkedObliqueProjPlane
Record of the last world-space oblique depth projection plane info used.
bool mRecalcFrustumPlanes
Something re the frustum planes has changed.
void visitRenderables(Renderable::Visitor *visitor, bool debugRenderables=false)
Method to allow a caller to abstractly iterate over the Renderable instances that this MovableObject ...
MaterialPtr mMaterial
virtual const Vector2 & getFrustumOffset() const
Retrieves the frustum offsets.
virtual void updateWorldSpaceCorners(void) const
virtual void getFrustumExtents(Real &outleft, Real &outright, Real &outtop, Real &outbottom) const
Get the extents of the frustum in view space.
virtual void invalidateView(void) const
Signal to update view information.
bool mRecalcVertexData
Something re the vertex data has changed.
bool mRecalcFrustum
Something's changed in the frustum shape?
ProjectionType mProjType
Orthographic or perspective?
Definition OgreFrustum.h:89
Matrix4 mProjMatrixRS
Pre-calced projection matrix for the specific render system.
Real mAspect
x/y viewport ratio - default 1.3333
Definition OgreFrustum.h:98
virtual bool isFrustumOutOfDate(void) const
virtual void setOrthoWindowWidth(Real w)
Sets the orthographic window width, for use with orthographic rendering only.
virtual void disableReflection(void)
Disables reflection modification previously turned on with enableReflection.
virtual void setAspectRatio(Real ratio)
Sets the aspect ratio for the frustum viewport.
Real mNearDist
Near clip distance - default 100.
Definition OgreFrustum.h:96
virtual const Radian & getFOVy(void) const
Retrieves the frustums Y-dimension Field Of View (FOV).
virtual void updateView(void) const
Update view if out of date.
bool mReflect
Is this frustum to act as a reflection of itself?
bool mCustomViewMatrix
Are we using a custom view matrix?
bool mFrustumExtentsManuallySet
Have the frustum extents been manually set?
Plane mObliqueProjPlane
Fixed oblique projection plane.
const MaterialPtr & getMaterial(void) const
Overridden from Renderable.
virtual bool isCustomProjectionMatrixEnabled(void) const
Returns whether a custom projection matrix is in use.
Radian mFOVy
y-direction field-of-view (default 45)
Definition OgreFrustum.h:92
virtual void enableReflection(const Plane &p)
Modifies this frustum so it always renders from the reflection of itself through the plane specified.
virtual void disableCustomNearClipPlane(void)
Disables any custom near clip plane.
virtual Real getFarClipDistance(void) const
Retrieves the distance from the frustum to the far clipping plane.
virtual bool isVisible(const Sphere &bound, FrustumPlane *culledBy=0) const
Tests whether the given container is visible in the Frustum.
virtual void updateViewImpl(void) const
Implementation of updateView (called if out of date)
Vector3 mLastParentPosition
Vector2 mFrustumOffset
Off-axis frustum center offset - default (0.0, 0.0)
virtual ProjectionType getProjectionType(void) const
Retrieves info on the type of projection used (orthographic or perspective).
virtual void updateFrustumImpl(void) const
Implementation of updateFrustum (called if out of date)
virtual void setNearClipDistance(Real nearDist)
Sets the position of the near clipping plane.
virtual void updateFrustumPlanes(void) const
Real getSquaredViewDepth(const Camera *cam) const
Overridden from Renderable.
virtual bool isReflected(void) const
Returns whether this frustum is being reflected.
virtual void setFrustumExtents(Real left, Real right, Real top, Real bottom)
Manually set the extents of the frustum.
virtual void resetFrustumExtents()
Reset the frustum extents to be automatically derived from other params.
virtual void setCustomViewMatrix(bool enable, const Matrix4 &viewMatrix=Matrix4::IDENTITY)
Set whether to use a custom view matrix on this frustum.
virtual bool projectSphere(const Sphere &sphere, Real *left, Real *top, Real *right, Real *bottom) const
Project a sphere onto the near plane and get the bounding rectangle.
virtual const Vector3 & getPositionForViewUpdate(void) const
Get the derived position of this frustum.
Frustum(const String &name=StringUtil::BLANK)
Named constructor.
virtual void calcViewMatrixRelative(const Vector3 &relPos, Matrix4 &matToUpdate) const
Calculate a view matrix for this frustum, relative to a potentially dynamic point.
PlaneBoundedVolume getPlaneBoundedVolume()
Gets a world-space list of planes enclosing the frustum.
virtual void updateFrustumPlanesImpl(void) const
Implementation of updateFrustumPlanes (called if out of date)
virtual const Matrix4 & getReflectionMatrix(void) const
Returns the reflection matrix of the frustum if appropriate.
Matrix4 mProjMatrixRSDepth
Pre-calced standard projection matrix but with render system depth range.
virtual const Plane & getReflectionPlane(void) const
Returns the reflection plane of the frustum if appropriate.
AxisAlignedBox mBoundingBox
Real mFarDist
Far clip distance - default 10000.
Definition OgreFrustum.h:94
virtual void enableReflection(const MovablePlane *p)
Modifies this frustum so it always renders from the reflection of itself through the plane specified.
Matrix4 mProjMatrix
Pre-calced standard projection matrix.
virtual void calcProjectionParameters(Real &left, Real &right, Real &bottom, Real &top) const
virtual const Matrix4 & getViewMatrix(void) const
Gets the view matrix for this frustum.
virtual Real getOrthoWindowWidth() const
Gets the orthographic window width, for use with orthographic rendering only.
virtual void setFarClipDistance(Real farDist)
Sets the distance to the far clipping plane.
const String & getMovableType(void) const
Overridden from MovableObject.
virtual void invalidateFrustum(void) const
Signal to update frustum information.
virtual void setFrustumOffset(const Vector2 &offset)
Sets frustum offsets, used in stereo rendering.
virtual const Matrix4 & getProjectionMatrix(void) const
Gets the normal projection matrix for this frustum, ie the projection matrix which conforms to standa...
virtual void setFOVy(const Radian &fovy)
Sets the Y-dimension Field Of View (FOV) of the frustum.
virtual const Matrix4 & getProjectionMatrixWithRSDepth(void) const
Gets the depth-adjusted projection matrix for the current rendersystem, but one which still conforms ...
const MovablePlane * mLinkedObliqueProjPlane
Pointer to oblique projection plane (automatically updated)
VertexData mVertexData
uint32 getTypeFlags(void) const
Overridden from MovableObject::getTypeFlags.
const LightList & getLights(void) const
Overridden from Renderable.
const MovablePlane * mLinkedReflectPlane
Pointer to a reflection plane (automatically updated)
virtual bool isVisible(const Vector3 &vert, FrustumPlane *culledBy=0) const
Tests whether the given vertex is visible in the Frustum.
bool mObliqueDepthProjection
Is this frustum using an oblique depth projection?
virtual bool isViewOutOfDate(void) const
bool mRecalcWorldSpaceCorners
Something re the world space corners has changed.
virtual const Vector3 * getWorldSpaceCorners(void) const
Gets the world space corners of the frustum.
virtual void setProjectionType(ProjectionType pt)
Sets the type of projection to use (orthographic or perspective).
virtual void setFocalLength(Real focalLength=1.0)
Sets frustum focal length (used in stereo rendering).
virtual const Plane * getFrustumPlanes(void) const
Retrieves the clipping planes of the frustum (world space).
void getRenderOperation(RenderOperation &op)
Overridden from Renderable.
static const Real INFINITE_FAR_PLANE_ADJUST
Small constant used to reduce far plane projection to avoid inaccuracies.
virtual void setOrthoWindow(Real w, Real h)
Sets the orthographic window settings, for use with orthographic rendering only.
bool mCustomProjMatrix
Are we using a custom projection matrix?
void _notifyCurrentCamera(Camera *cam)
Overridden from MovableObject.
virtual Real getNearClipDistance(void) const
Sets the position of the near clipping plane.
virtual const Plane & getFrustumPlane(unsigned short plane) const
Retrieves a specified plane of the frustum (world space).
virtual void updateWorldSpaceCornersImpl(void) const
Implementation of updateWorldSpaceCorners (called if out of date)
Real getBoundingRadius(void) const
Overridden from MovableObject.
Matrix4 mReflectMatrix
Derived reflection matrix.
static String msMovableType
Shared class-level name for Movable type.
virtual const Matrix4 & getProjectionMatrixRS(void) const
Gets the projection matrix for this frustum adjusted for the current rendersystem specifics (may be r...
Plane mReflectPlane
Fixed reflection plane.
Matrix4 mViewMatrix
Pre-calced view matrix.
virtual const Quaternion & getOrientationForViewUpdate(void) const
Get the derived orientation of this frustum.
virtual Real getFocalLength() const
Returns focal length of frustum.
virtual Real getOrthoWindowHeight() const
Gets the orthographic window height, for use with orthographic rendering only.
virtual void updateFrustum(void) const
Update frustum if out of date.
OrientationMode mOrientationMode
Frustum orientation mode.
virtual bool isCustomNearClipPlaneEnabled(void) const
Is a custom near clip plane in use?
virtual void setOrthoWindowHeight(Real h)
Sets the orthographic window height, for use with orthographic rendering only.
OrientationMode getOrientationMode() const
Get the orientation mode of the frustum.
virtual ~Frustum()
bool mRecalcView
Something re the view pos has changed.
Quaternion mLastParentOrientation
Stored versions of parent orientation / position.
const AxisAlignedBox & getBoundingBox(void) const
Overridden from MovableObject.
Class encapsulating a standard 4x4 homogeneous matrix.
Definition OgreMatrix4.h:79
Abstract class defining a movable object in a scene.
Definition of a Plane that may be attached to a node, and the derived details of it retrieved simply.
Represents a convex volume bounded by planes.
Defines a plane in 3D space.
Definition OgrePlane.h:62
Implementation of a Quaternion, i.e.
Wrapper class which indicates a given angle value is in Radians.
Definition OgreMath.h:48
'New' rendering operation using vertex buffers.
Class to manage the scene object rendering queue.
Visitor object that can be used to iterate over a collection of Renderable instances abstractly.
Abstract class defining the interface all renderable objects must implement.
A sphere primitive, mostly used for bounds checking.
Definition OgreSphere.h:52
Standard 2-dimensional vector.
Definition OgreVector2.h:52
Standard 3-dimensional vector.
Definition OgreVector3.h:52
Summary class collecting together vertex source information.
FrustumPlane
Worldspace clipping planes.
Definition OgreFrustum.h:72
OrientationMode
Specifies orientation mode.
Definition OgreFrustum.h:50
ProjectionType
Specifies perspective (realistic) or orthographic (architectural) projection.
Definition OgreFrustum.h:64
@ FRUSTUM_PLANE_FAR
Definition OgreFrustum.h:74
@ FRUSTUM_PLANE_TOP
Definition OgreFrustum.h:77
@ FRUSTUM_PLANE_BOTTOM
Definition OgreFrustum.h:78
@ FRUSTUM_PLANE_LEFT
Definition OgreFrustum.h:75
@ FRUSTUM_PLANE_RIGHT
Definition OgreFrustum.h:76
@ FRUSTUM_PLANE_NEAR
Definition OgreFrustum.h:73
@ OR_LANDSCAPELEFT
Definition OgreFrustum.h:58
@ OR_DEGREE_90
Definition OgreFrustum.h:52
@ OR_DEGREE_270
Definition OgreFrustum.h:54
@ OR_DEGREE_0
Definition OgreFrustum.h:51
@ OR_PORTRAIT
Definition OgreFrustum.h:56
@ OR_LANDSCAPERIGHT
Definition OgreFrustum.h:57
@ OR_DEGREE_180
Definition OgreFrustum.h:53
@ PT_ORTHOGRAPHIC
Definition OgreFrustum.h:65
@ PT_PERSPECTIVE
Definition OgreFrustum.h:66
float Real
Software floating point type.
unsigned int uint32
_StringBase String