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"
Classes | |
class | Point |
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 (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. | |
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. | |
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 (PN_stdfloat x, PN_stdfloat y, PN_stdfloat z) |
Moves the pen to the given point without drawing a line. | |
void | move_to (const LVecBase3 &v) |
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. | |
Static Public Member Functions | |
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 |
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 52 of file portalClipper.h.
void PortalClipper::draw_camera_frustum | ( | ) | [inline] |
Draw the current camera frustum in white color.
Definition at line 94 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 143 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 114 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 161 of file portalClipper.cxx.
References GeomVertexWriter::add_data3(), GeomVertexWriter::add_data4(), and GeomVertexFormat::get_v3cp().
Referenced by CullTraverser::traverse().
void PortalClipper::draw_to | ( | PN_stdfloat | x, |
PN_stdfloat | y, | ||
PN_stdfloat | z | ||
) | [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 83 of file portalClipper.I.
Referenced by draw_current_portal(), draw_hexahedron(), and prepare_portal().
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 92 of file portalClipper.cxx.
References move_to().
const RenderState * PortalClipper::get_clip_state | ( | ) | const [inline] |
Returns the stored clip state.
Definition at line 139 of file portalClipper.I.
Referenced by PortalNode::cull_callback().
BoundingHexahedron * PortalClipper::get_reduced_frustum | ( | ) | const [inline] |
Return the reduced frustum.
Definition at line 117 of file portalClipper.I.
Referenced by PortalNode::cull_callback().
void PortalClipper::get_reduced_viewport | ( | LPoint2 & | min, |
LPoint2 & | max | ||
) | const [inline] |
Return the reduced viewport.
Definition at line 163 of file portalClipper.I.
Referenced by PortalNode::cull_callback().
static void PortalClipper::init_type | ( | ) | [inline, static] |
This function is declared non-inline to work around a compiler bug in g++ 2.96.
Making it inline seems to cause problems in the optimizer.
Reimplemented from TypedObject.
Definition at line 86 of file portalClipper.h.
References TypedObject::init_type().
bool PortalClipper::is_facing_view | ( | const LPlane & | portal_plane | ) | [inline] |
checks if the portal plane (in camera space) is facing the camera's near plane
Definition at line 177 of file portalClipper.I.
Referenced by prepare_portal().
bool PortalClipper::is_whole_portal_in_view | ( | const LMatrix4 & | cmat | ) | [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 190 of file portalClipper.I.
References GeometricBoundingVolume::contains().
void PortalClipper::move_to | ( | PN_stdfloat | x, |
PN_stdfloat | y, | ||
PN_stdfloat | z | ||
) | [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 69 of file portalClipper.I.
Referenced by draw_current_portal(), draw_hexahedron(), draw_to(), and prepare_portal().
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 73 of file portalClipper.cxx.
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 222 of file portalClipper.cxx.
References draw_hexahedron(), draw_to(), Lens::extrude(), LVector3f::forward(), Lens::get_coordinate_system(), SceneSetup::get_cull_center(), SceneSetup::get_lens(), 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().
void PortalClipper::set_clip_state | ( | const RenderState * | clip_state | ) | [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 129 of file portalClipper.I.
Referenced by PortalNode::cull_callback().
void PortalClipper::set_reduced_frustum | ( | BoundingHexahedron * | frustum | ) | [inline] |
Set the current view frustum that is being calculated by the portal clipper.
Definition at line 107 of file portalClipper.I.
Referenced by PortalNode::cull_callback().
void PortalClipper::set_reduced_viewport | ( | const LPoint2 & | min, |
const LPoint2 & | max | ||
) | [inline] |
Set the current viewport that is being used by the portal clipper.
Definition at line 151 of file portalClipper.I.
Referenced by PortalNode::cull_callback().