Panda3D
Public Member Functions | Static Public Member Functions

MeshDrawer Class Reference

Mesh drawer creates a single geom object that can be shaped with different draw commands. More...

#include "meshDrawer.h"

Inheritance diagram for MeshDrawer:
TypedObject MemoryBase

List of all members.

Public Member Functions

 MeshDrawer ()
 Creates the MeshDrawer low level system.
 ~MeshDrawer ()
 Destroys the MeshDrawer low level system.
TypedObjectas_typed_object ()
 Returns the object, upcast (if necessary) to a TypedObject pointer.
const TypedObjectas_typed_object () const
 Returns the object, upcast (if necessary) to a TypedObject pointer.
void begin (NodePath camera, NodePath render)
 Pass the current camera node and the root node.
void billboard (LVector3f pos, LVector4f frame, float size, LVector4f color)
 Draws a billboard - particle with no rotation.
void blended_particle (LVector3f pos, LVector4f frame1, LVector4f frame2, float blend, float size, LVector4f color, float rotation)
 Works just like particle but accepts 2 frames and a blend (from 0 to 1) component between them Frame contains u,v,u-size,v-size quadruple.
void cross_segment (LVector3f start, LVector3f stop, LVector4f frame, float thickness, LVector4f color)
 Draws a segment a line with a thickness.
void end ()
 Finish the drawing and clearing off the remaining vertexes.
void explosion (LVector3f pos, LVector4f frame, float size, LVector4f color, int seed, int number, float distance)
 Draws number of particles in a sphere like emitter.
virtual TypeHandle force_init_type ()
void geometry (NodePath node)
 Draws the geometry that is inside this node path into the MeshDrawer object.
int get_best_parent_from_Set (const std::set< int > &) const
int get_budget ()
 Gets the total triangle budget of the drawer.
NodePath get_root ()
 Returns the root NodePath.
virtual TypeHandle get_type () 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.
void link_segment (LVector3f pos, LVector4f frame, float thickness, LVector4f color)
 Stars or continues linked segment.
void link_segment_end (LVector4f frame, LVector4f color)
 Finish drawing linked segments, needs at least two calls to link_segment before it can end the linked segment.
void operator delete (void *ptr)
void operator delete (void *ptr, void *)
void operator delete[] (void *ptr)
void operator delete[] (void *, void *)
void * operator new (size_t size, void *ptr)
void * operator new (size_t size)
void * operator new[] (size_t size, void *ptr)
void * operator new[] (size_t size)
void particle (LVector3f pos, LVector4f frame, float size, LVector4f color, float rotation)
 Draws a particle that is sort of like a bill board but has an extra rotation component.
void segment (LVector3f start, LVector3f stop, LVector4f frame, float thickness, LVector4f color)
 Draws a segment a line with a thickness.
void set_budget (int budget)
 Sets the total triangle budget of the drawer.
void stream (LVector3f start, LVector3f stop, LVector4f frame, float size, LVector4f color, int number, float offset)
 Draws a number of particles in a big line with a shift dictated by the offset.
void tri (LVector3f v1, LVector4f c1, LVector2f uv1, LVector3f v2, LVector4f c2, LVector2f uv2, LVector3f v3, LVector4f c3, LVector2f uv3)
 Draws a triangle with the given parameters.
void uneven_segment (LVector3f start, LVector3f stop, LVector4f frame, float thickness_start, LVector4f color_start, float thickness_stop, LVector4f color_stop)
 Draws a segment a line with different thickness and color on both sides.

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.

Detailed Description

Mesh drawer creates a single geom object that can be shaped with different draw commands.

This is an efficient way to render bunch of billboards, particles, fast changing triangles. Its implemented by recycling same geom over and over again. Max budget specifies how many triangles are allowed. Some uses of this class can be : particle system, radar icons, health bars, 2d icons, 2d ui, bullets, missile trails. Any that can be drawn with triangles can be drawn with this class. At the low level this uses the GeomVertexRewriter's. The internal geom consists of vertex, normal, uv and color channels.

Definition at line 58 of file meshDrawer.h.


Constructor & Destructor Documentation

MeshDrawer::MeshDrawer ( ) [inline]

Creates the MeshDrawer low level system.

Definition at line 23 of file meshDrawer.I.

MeshDrawer::~MeshDrawer ( ) [inline]

Destroys the MeshDrawer low level system.

Definition at line 40 of file meshDrawer.I.

References NodePath::remove_node().


Member Function Documentation

TypedObject * TypedObject::as_typed_object ( ) [inline, inherited]

Returns the object, upcast (if necessary) to a TypedObject pointer.

Definition at line 99 of file typedObject.I.

const TypedObject * TypedObject::as_typed_object ( ) const [inline, inherited]

Returns the object, upcast (if necessary) to a TypedObject pointer.

Definition at line 110 of file typedObject.I.

void MeshDrawer::begin ( NodePath  camera,
NodePath  render 
)

Pass the current camera node and the root node.

Passing the camera is required to generate bill boards that face it.

Definition at line 90 of file meshDrawer.cxx.

References NodePath::get_error_type(), NodePath::get_pos(), and NodePath::get_relative_vector().

void MeshDrawer::billboard ( LVector3f  pos,
LVector4f  frame,
float  size,
LVector4f  _color 
)

Draws a billboard - particle with no rotation.

Billboards always face the camera. Frame contains u,v,u-size,v-size quadruple.

Definition at line 208 of file meshDrawer.cxx.

References tri().

Referenced by stream().

void MeshDrawer::blended_particle ( LVector3f  pos,
LVector4f  frame1,
LVector4f  frame2,
float  blend,
float  size,
LVector4f  color,
float  rotation 
)

Works just like particle but accepts 2 frames and a blend (from 0 to 1) component between them Frame contains u,v,u-size,v-size quadruple.

Definition at line 190 of file meshDrawer.cxx.

References particle().

void MeshDrawer::cross_segment ( LVector3f  start,
LVector3f  stop,
LVector4f  frame,
float  thickness,
LVector4f  color 
)

Draws a segment a line with a thickness.

This segment does not use the bill boarding behavior and instead draws 2 planes in a cross. Stars at start and ends at stop. Frame contains u,v,u-size,v-size quadruple.

Definition at line 254 of file meshDrawer.cxx.

References tri().

void MeshDrawer::end ( )

Finish the drawing and clearing off the remaining vertexes.

Definition at line 132 of file meshDrawer.cxx.

References GeomVertexWriter::add_data3f().

void MeshDrawer::explosion ( LVector3f  pos,
LVector4f  frame,
float  size,
LVector4f  _color,
int  seed,
int  number,
float  distance 
)

Draws number of particles in a sphere like emitter.

Frame contains u,v,u-size,v-size quadruple.

Definition at line 339 of file meshDrawer.cxx.

References LVecBase3f::normalize(), and particle().

void MeshDrawer::geometry ( NodePath  draw_node)

Draws the geometry that is inside this node path into the MeshDrawer object.

This performs a similar functions as RigidBodyCombiner but for very dynamic situations that share the same texture like physcal chunks of explosions. It can be a little slow

Definition at line 384 of file meshDrawer.cxx.

References NodePath::find_all_matches(), GeomVertexReader::get_data2f(), GeomVertexReader::get_data3f(), NodePath::get_error_type(), NodePathCollection::get_num_paths(), NodePathCollection::get_path(), NodePath::get_relative_point(), NodePath::node(), GeomVertexReader::set_row(), and tri().

int MeshDrawer::get_budget ( ) [inline]

Gets the total triangle budget of the drawer.

Definition at line 80 of file meshDrawer.I.

NodePath MeshDrawer::get_root ( ) [inline]

Returns the root NodePath.

You should use this node to reparent mesh drawer onto the scene might also want to disable depth draw or enable transparency.

Definition at line 57 of file meshDrawer.I.

int TypedObject::get_type_index ( ) const [inline, inherited]

Returns the internal index number associated with this object's TypeHandle, a unique number for each different type.

This is equivalent to get_type().get_index().

Definition at line 52 of file typedObject.I.

References TypeHandle::get_index().

static void MeshDrawer::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 139 of file meshDrawer.h.

References TypedObject::init_type().

bool TypedObject::is_exact_type ( TypeHandle  handle) const [inline, inherited]
bool TypedObject::is_of_type ( TypeHandle  handle) const [inline, inherited]

Returns true if the current object is or derives from the indicated type.

Definition at line 63 of file typedObject.I.

References TypeHandle::is_derived_from().

Referenced by EggSliderData::add_back_pointer(), EggJointData::add_back_pointer(), CIntervalManager::add_c_interval(), XFileNode::add_child(), CollisionTraverser::add_collider(), CollisionHandlerPhysical::add_collider(), EggXfmSAnim::add_data(), CharacterJointBundle::add_node(), NonlinearImager::add_screen(), EggGroupNode::apply_first_attribute(), EggGroupNode::apply_last_attribute(), DeferredNodeProperty::apply_to_node(), RecorderController::begin_playback(), NodePath::clear_clip_plane(), EggGroupNode::clear_connected_shading(), NodePath::clear_light(), EggBase::convert_paths(), NodePath::decode_from_bam_stream(), VrpnClient::disconnect_device(), PhysicsManager::do_physics(), GraphicsStateGuardian::fetch_specified_part(), EggRenderState::fill_state(), AnimBundleNode::find_anim_bundle(), EggGroupNode::find_coordsys_entry(), XFile::find_data_object(), Character::find_joint(), EggGroupNode::find_materials(), Character::find_slider(), XFile::find_template(), EggGroupNode::find_textures(), EggMaterialCollection::find_used_materials(), EggTextureCollection::find_used_textures(), EggGroupNode::force_filenames(), EggJointData::force_initial_rest_frame(), WindowFramework::get_aspect_2d(), EggPoolUniquifier::get_category(), EggGroupUniquifier::get_category(), EggGroupNode::get_connected_shading(), PandaFramework::get_mouse(), FactoryParams::get_param_of_type(), EggGroupNode::has_absolute_pathnames(), NodePath::has_clip_plane(), NodePath::has_clip_plane_off(), NodePath::has_light(), PandaFramework::hide_collision_solids(), x11GraphicsWindow::open_window(), eglGraphicsWindow::open_window(), EggNode::parse_egg(), CharacterMaker::part_to_node(), EggGroupNode::post_apply_flat_attribute(), EggBinner::prepare_node(), PortalClipper::prepare_portal(), NodePath::project_texture(), EggMatrixTablePointer::quantize_channels(), ParametricCurveCollection::r_add_curves(), SceneGraphReducer::r_collect_vertex_data(), EggGroupNode::r_load_externals(), EggGroupNode::rebuild_vertex_pools(), EggGroupNode::recompute_polygon_normals(), EggGroupNode::remove_invalid_primitives(), EggGroupNode::remove_unused_vertices(), EggLoader::reparent_decals(), EggMaterialCollection::replace_materials(), EggTextureCollection::replace_textures(), EggGroupNode::resolve_filenames(), EggGroupNode::reverse_vertex_ordering(), NodePath::set_clip_plane(), NodePath::set_clip_plane_off(), NodePath::set_light(), ProjectionScreen::set_projector(), NonlinearImager::set_source_camera(), EggXfmSAnim::set_value(), NonlinearImager::set_viewer_camera(), PandaFramework::show_collision_solids(), BamCache::store(), XFileToEggConverter::strip_nodes(), EggGroupNode::strip_normals(), DataGraphTraverser::traverse(), DataGraphTraverser::traverse_below(), EggGroupNode::triangulate_polygons(), EggGroupNode::unify_attributes(), EggNameUniquifier::uniquify(), NodeCullCallbackData::upcall(), PhysicsCollisionHandler::validate_target(), EggXfmSAnim::write(), EggGroup::write(), EggToDXFLayer::write_3d_face(), and EggToDXFLayer::write_entities().

void MeshDrawer::link_segment ( LVector3f  pos,
LVector4f  frame,
float  thickness,
LVector4f  color 
)

Stars or continues linked segment.

Control position, frame, thickness and color with parameters. Frame contains u,v,u-size,v-size quadruple.

Definition at line 450 of file meshDrawer.cxx.

References NodePath::get_error_type(), NodePath::get_relative_point(), NodePath::node(), and tri().

Referenced by segment().

void MeshDrawer::link_segment_end ( LVector4f  frame,
LVector4f  color 
)

Finish drawing linked segments, needs at least two calls to link_segment before it can end the linked segment.

Frame contains u,v,u-size,v-size quadruple.

Definition at line 553 of file meshDrawer.cxx.

References tri().

Referenced by segment().

void MeshDrawer::particle ( LVector3f  pos,
LVector4f  frame,
float  size,
LVector4f  color,
float  rotation 
)

Draws a particle that is sort of like a bill board but has an extra rotation component.

Frame contains u,v,u-size,v-size quadruple.

Definition at line 158 of file meshDrawer.cxx.

References tri().

Referenced by blended_particle(), and explosion().

void MeshDrawer::segment ( LVector3f  start,
LVector3f  stop,
LVector4f  frame,
float  thickness,
LVector4f  color 
)

Draws a segment a line with a thickness.

That has billboarding effect. Frame contains u,v,u-size,v-size quadruple.

Definition at line 239 of file meshDrawer.cxx.

References link_segment(), and link_segment_end().

void MeshDrawer::set_budget ( int  total_budget) [inline]

Sets the total triangle budget of the drawer.

This will not be exceeded. Don't set some thing too large because it will be slow

Definition at line 69 of file meshDrawer.I.

void MeshDrawer::stream ( LVector3f  start,
LVector3f  stop,
LVector4f  frame,
float  size,
LVector4f  _color,
int  number,
float  offset 
)

Draws a number of particles in a big line with a shift dictated by the offset.

Frame contains u,v,u-size,v-size quadruple.

Definition at line 359 of file meshDrawer.cxx.

References billboard(), and LVecBase3f::length().

void MeshDrawer::tri ( LVector3f  v1,
LVector4f  c1,
LVector2f  uv1,
LVector3f  v2,
LVector4f  c2,
LVector2f  uv2,
LVector3f  v3,
LVector4f  c3,
LVector2f  uv3 
) [inline]
void MeshDrawer::uneven_segment ( LVector3f  start,
LVector3f  stop,
LVector4f  frame,
float  thickness_start,
LVector4f  color_start,
float  thickness_stop,
LVector4f  color_stop 
)

Draws a segment a line with different thickness and color on both sides.

Stars at start and ends at stop. Frame contains u,v,u-size,v-size quadruple.

Definition at line 299 of file meshDrawer.cxx.

References tri().


The documentation for this class was generated from the following files:
 All Classes Functions Variables Enumerations