237 lines
9.7 KiB
Plaintext
237 lines
9.7 KiB
Plaintext
// Filename: cullTraverser.I
|
|
// Created by: drose (23Feb02)
|
|
//
|
|
////////////////////////////////////////////////////////////////////
|
|
//
|
|
// PANDA 3D SOFTWARE
|
|
// Copyright (c) 2001, Disney Enterprises, Inc. All rights reserved
|
|
//
|
|
// All use of this software is subject to the terms of the Panda 3d
|
|
// Software license. You should have received a copy of this license
|
|
// along with this source code; you will also find a current copy of
|
|
// the license at http://www.panda3d.org/license.txt .
|
|
//
|
|
// To contact the maintainers of this program write to
|
|
// panda3d@yahoogroups.com .
|
|
//
|
|
////////////////////////////////////////////////////////////////////
|
|
|
|
|
|
////////////////////////////////////////////////////////////////////
|
|
// Function: CullTraverser::set_scene
|
|
// Access: Public
|
|
// Description: Sets the SceneSetup object that indicates the initial
|
|
// camera position, etc. This must be called before
|
|
// traversal begins.
|
|
////////////////////////////////////////////////////////////////////
|
|
INLINE void CullTraverser::
|
|
set_scene(SceneSetup *scene_setup) {
|
|
_scene_setup = scene_setup;
|
|
}
|
|
|
|
////////////////////////////////////////////////////////////////////
|
|
// Function: CullTraverser::get_scene
|
|
// Access: Public
|
|
// Description: Returns the SceneSetup object.
|
|
////////////////////////////////////////////////////////////////////
|
|
INLINE SceneSetup *CullTraverser::
|
|
get_scene() const {
|
|
return _scene_setup;
|
|
}
|
|
|
|
////////////////////////////////////////////////////////////////////
|
|
// Function: CullTraverser::get_camera_transform
|
|
// Access: Public
|
|
// Description: Returns the position of the camera relative to the
|
|
// starting node, without any compensating
|
|
// coordinate-system transforms that might have been
|
|
// introduced for the purposes of rendering.
|
|
////////////////////////////////////////////////////////////////////
|
|
INLINE const TransformState *CullTraverser::
|
|
get_camera_transform() const {
|
|
return _scene_setup->get_camera_transform();
|
|
}
|
|
|
|
////////////////////////////////////////////////////////////////////
|
|
// Function: CullTraverser::get_render_transform
|
|
// Access: Public
|
|
// Description: Returns the position of the starting node relative
|
|
// to the camera, pretransformed as appropriate for
|
|
// rendering.
|
|
//
|
|
// Note that this value is always the position of the
|
|
// starting node, not the current node, even if it is
|
|
// sampled during a traversal. To get the render
|
|
// transform of the current node check in the current
|
|
// CullTraverserData.
|
|
////////////////////////////////////////////////////////////////////
|
|
INLINE const TransformState *CullTraverser::
|
|
get_render_transform() const {
|
|
return _scene_setup->get_render_transform();
|
|
}
|
|
|
|
////////////////////////////////////////////////////////////////////
|
|
// Function: CullTraverser::set_initial_state
|
|
// Access: Public
|
|
// Description: Sets the initial RenderState at the top of the scene
|
|
// graph we are traversing. If this is not set, the
|
|
// default is the empty state.
|
|
////////////////////////////////////////////////////////////////////
|
|
INLINE void CullTraverser::
|
|
set_initial_state(const RenderState *initial_state) {
|
|
_initial_state = initial_state;
|
|
}
|
|
|
|
////////////////////////////////////////////////////////////////////
|
|
// Function: CullTraverser::get_initial_state
|
|
// Access: Public
|
|
// Description: Returns the initial RenderState at the top of the
|
|
// scene graph we are traversing, or the empty state if
|
|
// the initial state was never set.
|
|
////////////////////////////////////////////////////////////////////
|
|
INLINE const RenderState *CullTraverser::
|
|
get_initial_state() const {
|
|
return _initial_state;
|
|
}
|
|
|
|
////////////////////////////////////////////////////////////////////
|
|
// Function: CullTraverser::set_depth_offset_decals
|
|
// Access: Public
|
|
// Description: Sets the depth_offset_decals flag. If this is true,
|
|
// decals will be rendered using DepthOffsetAttribs;
|
|
// otherwise, decals will be rendered with a more
|
|
// expensive three-pass system. This is normally set
|
|
// from the corresponding flag in the GSG.
|
|
////////////////////////////////////////////////////////////////////
|
|
INLINE void CullTraverser::
|
|
set_depth_offset_decals(bool flag) {
|
|
_depth_offset_decals = flag;
|
|
}
|
|
|
|
////////////////////////////////////////////////////////////////////
|
|
// Function: CullTraverser::get_depth_offset_decals
|
|
// Access: Public
|
|
// Description: Returns the depth_offset_decals flag. See
|
|
// set_depth_offset_decals().
|
|
////////////////////////////////////////////////////////////////////
|
|
INLINE bool CullTraverser::
|
|
get_depth_offset_decals() const {
|
|
return _depth_offset_decals;
|
|
}
|
|
|
|
////////////////////////////////////////////////////////////////////
|
|
// Function: CullTraverser::set_camera_mask
|
|
// Access: Public
|
|
// Description: Specifies the visibility mask from the camera viewing
|
|
// the scene. Any nodes that do not have at least some
|
|
// bits in common with this mask will not be drawn.
|
|
////////////////////////////////////////////////////////////////////
|
|
INLINE void CullTraverser::
|
|
set_camera_mask(const DrawMask &camera_mask) {
|
|
_camera_mask = camera_mask;
|
|
}
|
|
|
|
////////////////////////////////////////////////////////////////////
|
|
// Function: CullTraverser::get_camera_mask
|
|
// Access: Public
|
|
// Description: Returns the visibility mask from the camera viewing
|
|
// the scene.
|
|
////////////////////////////////////////////////////////////////////
|
|
INLINE const DrawMask &CullTraverser::
|
|
get_camera_mask() const {
|
|
return _camera_mask;
|
|
}
|
|
|
|
////////////////////////////////////////////////////////////////////
|
|
// Function: CullTraverser::set_view_frustum
|
|
// Access: Public
|
|
// Description: Specifies the bounding volume that corresponds to the
|
|
// view frustum. Any primitives that fall entirely
|
|
// outside of this volume are not drawn.
|
|
////////////////////////////////////////////////////////////////////
|
|
INLINE void CullTraverser::
|
|
set_view_frustum(GeometricBoundingVolume *view_frustum) {
|
|
_view_frustum = view_frustum;
|
|
}
|
|
|
|
////////////////////////////////////////////////////////////////////
|
|
// Function: CullTraverser::get_view_frustum
|
|
// Access: Public
|
|
// Description: Returns the bounding volume that corresponds to the
|
|
// view frustum, or NULL if the view frustum is not in
|
|
// use or has not been set.
|
|
//
|
|
// Note that the view frustum returned here is always in
|
|
// the coordinate space of the starting node, not the
|
|
// current node, even if it is sampled during a
|
|
// traversal. To get the view frustum in the current
|
|
// node's coordinate space, check in the current
|
|
// CullTraverserData.
|
|
////////////////////////////////////////////////////////////////////
|
|
INLINE GeometricBoundingVolume *CullTraverser::
|
|
get_view_frustum() const {
|
|
return _view_frustum;
|
|
}
|
|
|
|
////////////////////////////////////////////////////////////////////
|
|
// Function: CullTraverser::set_guard_band
|
|
// Access: Public
|
|
// Description: Specifies the bounding volume to use for detecting
|
|
// guard band clipping. This is a render optimization
|
|
// for certain cards that support this feature; the
|
|
// guard band is a 2-d area than the frame buffer.
|
|
// If a primitive will appear entirely within the guard
|
|
// band after perspective transform, it may be drawn
|
|
// correctly with clipping disabled, for a small
|
|
// performance gain.
|
|
//
|
|
// This is the bounding volume that corresponds to the
|
|
// 2-d guard band. If a primitive is entirely within
|
|
// this area, clipping will be disabled on the GSG.
|
|
////////////////////////////////////////////////////////////////////
|
|
INLINE void CullTraverser::
|
|
set_guard_band(GeometricBoundingVolume *guard_band) {
|
|
_guard_band = guard_band;
|
|
}
|
|
|
|
////////////////////////////////////////////////////////////////////
|
|
// Function: CullTraverser::get_guard_band
|
|
// Access: Public
|
|
// Description: Returns the bounding volume that corresponds to the
|
|
// guard band, or NULL if the guard band is not in
|
|
// use or has not been set.
|
|
//
|
|
// Note that the guard band returned here is always in
|
|
// the coordinate space of the starting node, not the
|
|
// current node, even if it is sampled during a
|
|
// traversal. To get the guard band in the current
|
|
// node's coordinate space, check in the current
|
|
// CullTraverserData.
|
|
////////////////////////////////////////////////////////////////////
|
|
INLINE GeometricBoundingVolume *CullTraverser::
|
|
get_guard_band() const {
|
|
return _guard_band;
|
|
}
|
|
|
|
////////////////////////////////////////////////////////////////////
|
|
// Function: CullTraverser::set_cull_handler
|
|
// Access: Public
|
|
// Description: Specifies the object that will receive the culled
|
|
// Geoms. This must be set before calling traverse().
|
|
////////////////////////////////////////////////////////////////////
|
|
INLINE void CullTraverser::
|
|
set_cull_handler(CullHandler *cull_handler) {
|
|
_cull_handler = cull_handler;
|
|
}
|
|
|
|
////////////////////////////////////////////////////////////////////
|
|
// Function: CullTraverser::get_cull_handler
|
|
// Access: Public
|
|
// Description: Returns the object that will receive the culled
|
|
// Geoms.
|
|
////////////////////////////////////////////////////////////////////
|
|
INLINE CullHandler *CullTraverser::
|
|
get_cull_handler() const {
|
|
return _cull_handler;
|
|
}
|