GeomNode
-
class GeomNode
Bases:
PandaNode
A node that holds Geom objects, renderable pieces of geometry. This is the primary kind of leaf node in the scene graph; almost all visible objects will be contained in a GeomNode somewhere.
Inheritance diagram
-
explicit GeomNode(std::string const &name)
-
void add_geom(Geom *geom, RenderState const *state = RenderState::make_empty())
Adds a new Geom to the node. The geom is given the indicated state (which may be
RenderState::make_empty()
, to completely inherit its state from the scene graph).
-
void add_geoms_from(GeomNode const *other)
Copies the Geoms (and their associated
RenderStates
) from the indicatedGeomNode
into this one.
-
bool check_valid(void) const
Verifies that the each Geom within the
GeomNode
reference vertices that actually exist within itsGeomVertexData
. Returns true if theGeomNode
appears to be valid, false otherwise.
-
void decompose(void)
Calls decompose() on each Geom with the
GeomNode
. This decomposes higher- order primitive types, like triangle strips, into lower-order types like indexed triangles. Normally there is no reason to do this, but it can be useful as an early preprocessing step, to allow a later call tounify()
to proceed more quickly.See also
SceneGraphReducer::decompose()
, which is the normal way this is called.
-
static TypeHandle get_class_type(void)
-
CollideMask get_default_collide_mask(void)
Returns the default into_collide_mask assigned to new
GeomNodes
.
-
ConstPointerTo<Geom> get_geom(int n) const
Returns the nth geom of the node. This object should not be modified, since the same object might be shared between multiple different
GeomNodes
, but seemodify_geom()
.
-
RenderState const *get_geom_state(int n) const
Returns the
RenderState
associated with the nth geom of the node. This is just theRenderState
directly associated with the Geom; the actual state in which the Geom is rendered will also be affected byRenderStates
that appear on the scene graph in nodes above thisGeomNode
.
-
int get_num_geoms(void) const
Returns the number of geoms in the node.
-
bool get_preserved(void) const
Returns the “preserved” flag. When this is true, the
GeomNode
will be left untouched by any flatten operations.
-
PointerTo<Geom> modify_geom(int n)
Returns the nth geom of the node, suitable for modifying it. If the nth Geom has multiple reference counts to it, reassigns it to an identical copy first, and returns the new copy–this provides a “copy on write” that ensures that the Geom that is returned is unique to this
GeomNode
and is not shared with any otherGeomNodes
.Note that if this method is called in a downstream stage (for instance, during cull or draw), then it will propagate the new list of Geoms upstream all the way to pipeline stage 0, which may step on changes that were made independently in pipeline stage 0. Use with caution.
-
void remove_all_geoms(void)
Removes all the geoms from the node at once.
-
void remove_geom(int n)
Removes the nth geom from the node.
-
void set_geom(int n, Geom *geom)
Replaces the nth Geom of the node with a new pointer. There must already be a Geom in this slot.
Note that if this method is called in a downstream stage (for instance, during cull or draw), then it will propagate the new list of Geoms upstream all the way to pipeline stage 0, which may step on changes that were made independently in pipeline stage 0. Use with caution.
-
void set_geom_state(int n, RenderState const *state)
Changes the
RenderState
associated with the nth geom of the node. This is just theRenderState
directly associated with the Geom; the actual state in which the Geom is rendered will also be affected byRenderStates
that appear on the scene graph in nodes above thisGeomNode
.Note that if this method is called in a downstream stage (for instance, during cull or draw), then it will propagate the new list of Geoms upstream all the way to pipeline stage 0, which may step on changes that were made independently in pipeline stage 0. Use with caution.
-
void set_preserved(bool value)
Sets the “preserved” flag. When this is true, the
GeomNode
will be left untouched by any flatten operations.
-
void unify(int max_indices, bool preserve_order)
Attempts to unify all of the Geoms contained within this node into a single Geom, or at least as few Geoms as possible. In turn, the individual
GeomPrimitives
contained within each resulting Geom are also unified. The goal is to reduce the number ofGeomPrimitives
within the node as far as possible. This may result in composite primitives, such as triangle strips and triangle fans, being decomposed into triangles. See alsoGeom::unify()
.max_indices represents the maximum number of indices that will be put in any one
GeomPrimitive
. If preserve_order is true, then the primitives will not be reordered during the operation, even if this results in a suboptimal result.In order for this to be successful, the primitives must reference the same
GeomVertexData
, have the same fundamental primitive type, and have compatible shade models.
-
void write_geoms(std::ostream &out, int indent_level) const
Writes a short description of all the Geoms in the node.
-
void write_verbose(std::ostream &out, int indent_level) const
Writes a detailed description of all the Geoms in the node.
-
explicit GeomNode(std::string const &name)