Panda3D
|
This object performs a depth-first traversal of the scene graph, with optional view-frustum culling, collecting CullState and searching for GeomNodes. More...
#include "portalClipper.h"
Public Member Functions | |
PortalClipper (GeometricBoundingVolume *frustum, SceneSetup *scene_setup) | |
void | draw_camera_frustum () |
Draw the current camera frustum in white color. | |
void | draw_current_portal () |
_portal_node is the current portal, draw it. | |
void | draw_hexahedron (BoundingHexahedron *frustum) |
Given the BoundingHexahedron draw it using lines. | |
void | draw_lines () |
Draw all the lines in the buffer Cyan portal is the original geometry of the portal Yellow portal is the AA minmax & clipped portal Blue frustum is the frustum through portal White frustum is the camera frustum. | |
void | draw_to (const LVecBase3 &v) |
Draws a line segment from the pen's last position (the last call to move_to or draw_to) to the indicated point. | |
void | draw_to (PN_stdfloat x, PN_stdfloat y, PN_stdfloat z) |
Draws a line segment from the pen's last position (the last call to move_to or draw_to) to the indicated point. | |
virtual TypeHandle | force_init_type () |
const RenderState * | get_clip_state () const |
Returns the stored clip state. | |
BoundingHexahedron * | get_reduced_frustum () const |
Return the reduced frustum. | |
void | get_reduced_viewport (LPoint2 &min, LPoint2 &max) const |
Return the reduced viewport. | |
virtual TypeHandle | get_type () const |
bool | is_facing_view (const LPlane &portal_plane) |
checks if the portal plane (in camera space) is facing the camera's near plane | |
bool | is_partial_portal_in_view () |
bool | is_whole_portal_in_view (const LMatrix4 &cmat) |
checks if portal_node is within the view frustum. | |
void | move_to (const LVecBase3 &v) |
Moves the pen to the given point without drawing a line. | |
void | move_to (PN_stdfloat x, PN_stdfloat y, PN_stdfloat z) |
Moves the pen to the given point without drawing a line. | |
bool | prepare_portal (const NodePath &node_path) |
Given the portal draw the frustum with line segs for now. | |
PT (GeomNode) _previous | |
void | set_clip_state (const RenderState *clip_state) |
Set the clip state of the current portal node This is done to remember the state for the child portal nodes. | |
void | set_reduced_frustum (BoundingHexahedron *bh) |
Set the current view frustum that is being calculated by the portal clipper. | |
void | set_reduced_viewport (const LPoint2 &min, const LPoint2 &max) |
Set the current viewport that is being used by the portal clipper. | |
![]() | |
TypedObject (const TypedObject ©)=default | |
TypedObject * | as_typed_object () |
Returns the object, upcast (if necessary) to a TypedObject pointer. | |
const TypedObject * | as_typed_object () const |
Returns the object, upcast (if necessary) to a TypedObject pointer. | |
int | get_best_parent_from_Set (const std::set< int > &) const |
int | get_type_index () const |
Returns the internal index number associated with this object's TypeHandle, a unique number for each different type. | |
bool | is_exact_type (TypeHandle handle) const |
Returns true if the current object is the indicated type exactly. | |
bool | is_of_type (TypeHandle handle) const |
Returns true if the current object is or derives from the indicated type. | |
TypedObject & | operator= (const TypedObject ©)=default |
![]() | |
void | operator delete (void *, void *) |
void | operator delete (void *ptr) |
void | operator delete[] (void *, void *) |
void | operator delete[] (void *ptr) |
void * | operator new (size_t size) |
void * | operator new (size_t size, void *ptr) |
void * | operator new[] (size_t size) |
void * | operator new[] (size_t size, void *ptr) |
Static Public Member Functions | |
static TypeHandle | get_class_type () |
static void | init_type () |
![]() | |
static TypeHandle | get_class_type () |
static void | init_type () |
This function is declared non-inline to work around a compiler bug in g++ 2.96. | |
Public Attributes | |
SceneSetup * | _scene_setup |
![]() | |
get_type | |
This object performs a depth-first traversal of the scene graph, with optional view-frustum culling, collecting CullState and searching for GeomNodes.
Each renderable Geom encountered is passed along with its associated RenderState to the CullHandler object.
Definition at line 49 of file portalClipper.h.
PortalClipper::PortalClipper | ( | GeometricBoundingVolume * | frustum, |
SceneSetup * | scene_setup ) |
Definition at line 42 of file portalClipper.cxx.
PortalClipper::~PortalClipper | ( | ) |
Definition at line 59 of file portalClipper.cxx.
|
inline |
Draw the current camera frustum in white color.
Definition at line 74 of file portalClipper.I.
References draw_hexahedron().
Referenced by CullTraverser::traverse().
void PortalClipper::draw_current_portal | ( | ) |
_portal_node is the current portal, draw it.
Definition at line 130 of file portalClipper.cxx.
References draw_to(), PortalNode::get_vertex, and move_to().
void PortalClipper::draw_hexahedron | ( | BoundingHexahedron * | frustum | ) |
Given the BoundingHexahedron draw it using lines.
Definition at line 103 of file portalClipper.cxx.
References draw_to(), BoundingHexahedron::get_point, and move_to().
Referenced by draw_camera_frustum(), and prepare_portal().
void PortalClipper::draw_lines | ( | ) |
Draw all the lines in the buffer Cyan portal is the original geometry of the portal Yellow portal is the AA minmax & clipped portal Blue frustum is the frustum through portal White frustum is the camera frustum.
Definition at line 144 of file portalClipper.cxx.
References GeomVertexWriter::add_data3(), and GeomVertexFormat::get_v3cp().
Referenced by CullTraverser::traverse().
void PortalClipper::draw_to | ( | const LVecBase3 & | v | ) |
Draws a line segment from the pen's last position (the last call to move_to or draw_to) to the indicated point.
move_to() and draw_to() only update tables; the actual drawing is performed when create() is called.
Definition at line 83 of file portalClipper.cxx.
References move_to().
|
inline |
Draws a line segment from the pen's last position (the last call to move_to or draw_to) to the indicated point.
move_to() and draw_to() only update tables; the actual drawing is performed when create() is called.
Definition at line 65 of file portalClipper.I.
References draw_to().
Referenced by draw_current_portal(), draw_hexahedron(), draw_to(), and prepare_portal().
|
inlinevirtual |
Implements TypedObject.
Definition at line 91 of file portalClipper.h.
|
inlinestatic |
Definition at line 80 of file portalClipper.h.
|
inline |
Returns the stored clip state.
Definition at line 110 of file portalClipper.I.
Referenced by PortalNode::cull_callback().
|
inline |
Return the reduced frustum.
Definition at line 92 of file portalClipper.I.
Referenced by PortalNode::cull_callback().
|
inline |
Return the reduced viewport.
Definition at line 129 of file portalClipper.I.
Referenced by PortalNode::cull_callback().
|
inlinevirtual |
Implements TypedObject.
Definition at line 88 of file portalClipper.h.
|
inlinestatic |
Definition at line 83 of file portalClipper.h.
|
inline |
checks if the portal plane (in camera space) is facing the camera's near plane
Definition at line 141 of file portalClipper.I.
Referenced by prepare_portal().
|
inline |
checks if portal_node is within the view frustum.
If so, then the portal is worth considering. This is a 2nd level test to weed out most of the portals
Definition at line 152 of file portalClipper.I.
References GeometricBoundingVolume::contains().
void PortalClipper::move_to | ( | const LVecBase3 & | v | ) |
Moves the pen to the given point without drawing a line.
When followed by draw_to(), this marks the first point of a line segment; when followed by move_to() or create(), this creates a single point.
Definition at line 68 of file portalClipper.cxx.
|
inline |
Moves the pen to the given point without drawing a line.
When followed by draw_to(), this marks the first point of a line segment; when followed by move_to() or create(), this creates a single point.
Definition at line 55 of file portalClipper.I.
References move_to().
Referenced by draw_current_portal(), draw_hexahedron(), draw_to(), move_to(), and prepare_portal().
bool PortalClipper::prepare_portal | ( | const NodePath & | node_path | ) |
Given the portal draw the frustum with line segs for now.
More functionalities coming up
Definition at line 202 of file portalClipper.cxx.
References draw_hexahedron(), draw_to(), Lens::extrude(), Lens::get_coordinate_system, SceneSetup::get_cull_center(), SceneSetup::get_lens(), TransformState::get_mat, NodePath::get_transform(), PortalNode::get_vertex, is_facing_view(), TypedObject::is_of_type(), move_to(), NodePath::node(), and Lens::project().
Referenced by PortalNode::cull_callback().
|
inline |
Set the clip state of the current portal node This is done to remember the state for the child portal nodes.
Definition at line 102 of file portalClipper.I.
Referenced by PortalNode::cull_callback().
|
inline |
Set the current view frustum that is being calculated by the portal clipper.
Definition at line 84 of file portalClipper.I.
Referenced by PortalNode::cull_callback().
|
inline |
Set the current viewport that is being used by the portal clipper.
Definition at line 119 of file portalClipper.I.
Referenced by PortalNode::cull_callback().
SceneSetup* PortalClipper::_scene_setup |
Definition at line 128 of file portalClipper.h.