Panda3D

Loading...
Searching...
No Matches
Public Member Functions | Static Public Member Functions | List of all members
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:

## Public Member Functions
| MeshDrawer ()
| Creates the MeshDrawer low level system.
| ~MeshDrawer ()
| Destroys the MeshDrawer low level system.
void | begin (NodePath camera, NodePath render)
| Pass the current camera node and the root node.
void | billboard (const LVector3 &pos, const LVector4 &frame, PN_stdfloat size, const LVector4 &color)
| Draws a billboard - particle with no rotation.
void | blended_particle (const LVector3 &pos, const LVector4 &frame1, const LVector4 &frame2, PN_stdfloat blend, PN_stdfloat size, const LVector4 &color, PN_stdfloat 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 (const LVector3 &start, const LVector3 &stop, const LVector4 &frame, PN_stdfloat thickness, const LVector4 &color)
| Draws a segment a line with a thickness.
void | end ()
| Finish the drawing and clearing off the remaining vertexes.
void | explosion (const LVector3 &pos, const LVector4 &frame, PN_stdfloat size, const LVector4 &color, int seed, int number, PN_stdfloat 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_budget ()
| Gets the total triangle budget of the drawer.
NodePath | get_root ()
| Returns the root NodePath.
virtual TypeHandle | get_type () const
void | link_segment (const LVector3 &pos, const LVector4 &frame, PN_stdfloat thickness, const LVector4 &color)
| Stars or continues linked segment.
void | link_segment_end (const LVector4 &frame, const LVector4 &color)
| Finish drawing linked segments, needs at least two calls to link_segment before it can end the linked segment.
void | particle (const LVector3 &pos, const LVector4 &frame, PN_stdfloat size, const LVector4 &color, PN_stdfloat rotation)
| Draws a particle that is sort of like a bill board but has an extra rotation component.
void | segment (const LVector3 &start, const LVector3 &stop, const LVector4 &frame, PN_stdfloat thickness, const LVector4 &color)
| Draws a segment a line with a thickness.
void | set_budget (int budget)
| Sets the total triangle budget of the drawer.
void | stream (const LVector3 &start, const LVector3 &stop, const LVector4 &frame, PN_stdfloat size, const LVector4 &color, int number, PN_stdfloat offset)
| Draws a number of particles in a big line with a shift dictated by the offset.
void | tri (const LVector3 &v1, const LVector4 &c1, const LVector2 &uv1, const LVector3 &v2, const LVector4 &c2, const LVector2 &uv2, const LVector3 &v3, const LVector4 &c3, const LVector2 &uv3)
| Draws a triangle with the given parameters.
void | uneven_segment (const LVector3 &start, const LVector3 &stop, const LVector4 &frame, PN_stdfloat thickness_start, const LVector4 &color_start, PN_stdfloat thickness_stop, const LVector4 &color_stop)
| Draws a segment a line with different thickness and color on both sides.
Public Member Functions inherited from TypedObject
| TypedObject (const TypedObject &copy)=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 &copy)=default
Public Member Functions inherited from MemoryBase
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 Public Member Functions inherited from TypedObject
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.

## Additional Inherited Members
Public Attributes inherited from TypedObject
| get_type

## 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 54 of file meshDrawer.h.

## Constructor & Destructor Documentation

## ◆ MeshDrawer()

MeshDrawer::MeshDrawer | ( |  | ) |
| inline

Creates the MeshDrawer low level system.

Definition at line 19 of file meshDrawer.I.

## ◆ ~MeshDrawer()

MeshDrawer::~MeshDrawer | ( |  | ) |
| inline

Destroys the MeshDrawer low level system.

Definition at line 35 of file meshDrawer.I.

## Member Function Documentation

## ◆ begin()

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 88 of file meshDrawer.cxx.

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

## ◆ billboard()

void MeshDrawer::billboard | ( | const LVector3 & | pos,
|  | const LVector4 & | frame,
|  | PN_stdfloat | size,
|  | const LVector4 & | _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 200 of file meshDrawer.cxx.

References tri().

Referenced by stream().

## ◆ blended_particle()

void MeshDrawer::blended_particle | ( | const LVector3 & | pos,
|  | const LVector4 & | frame1,
|  | const LVector4 & | frame2,
|  | PN_stdfloat | blend,
|  | PN_stdfloat | size,
|  | const LVector4 & | color,
|  | PN_stdfloat | 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 184 of file meshDrawer.cxx.

References particle().

## ◆ cross_segment()

void MeshDrawer::cross_segment | ( | const LVector3 & | start,
|  | const LVector3 & | stop,
|  | const LVector4 & | frame,
|  | PN_stdfloat | thickness,
|  | const LVector4 & | 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 239 of file meshDrawer.cxx.

References tri().

## ◆ end()

void MeshDrawer::end | ( |  | ) |

Finish the drawing and clearing off the remaining vertexes.

Definition at line 132 of file meshDrawer.cxx.

## ◆ explosion()

void MeshDrawer::explosion | ( | const LVector3 & | pos,
|  | const LVector4 & | frame,
|  | PN_stdfloat | size,
|  | const LVector4 & | _color,
|  | int | seed,
|  | int | number,
|  | PN_stdfloat | distance )

Draws number of particles in a sphere like emitter.

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

Definition at line 319 of file meshDrawer.cxx.

References particle().

## ◆ force_init_type()

virtual TypeHandle MeshDrawer::force_init_type | ( |  | ) |
| inline virtual

Implements TypedObject.

Definition at line 141 of file meshDrawer.h.

## ◆ geometry()

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 358 of file meshDrawer.cxx.

References NodePath::find_all_matches(), GeomVertexReader::get_data2(), GeomVertexReader::get_data3(), NodePathCollection::get_num_paths, NodePathCollection::get_path, NodePath::node(), GeomVertexReader::set_row_unsafe(), and tri().

## ◆ get_budget()

int MeshDrawer::get_budget | ( |  | ) |
| inline

Gets the total triangle budget of the drawer.

Definition at line 67 of file meshDrawer.I.

## ◆ get_class_type()

static TypeHandle MeshDrawer::get_class_type | ( |  | ) |
| inline static

Definition at line 130 of file meshDrawer.h.

## ◆ get_root()

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 49 of file meshDrawer.I.

## ◆ get_type()

virtual TypeHandle MeshDrawer::get_type | ( |  | ) | const
| inline virtual

Implements TypedObject.

Definition at line 138 of file meshDrawer.h.

## ◆ init_type()

static void MeshDrawer::init_type | ( |  | ) |
| inline static

Definition at line 133 of file meshDrawer.h.

## ◆ link_segment()

void MeshDrawer::link_segment | ( | const LVector3 & | pos,
|  | const LVector4 & | frame,
|  | PN_stdfloat | thickness,
|  | const LVector4 & | color )

Stars or continues linked segment.

Control position, frame, thickness and color with parameters. Frame contains u,v,u-size,v-size quadruple. Note that for the first two calls to this method, the "frame" parameter is ignored; it first takes effect as of the third call. Similarly, note that in the second call to this method, the "color" parameter is ignored; it only has effect in the first call and calls from the third onwards.

Definition at line 425 of file meshDrawer.cxx.

References LensNode::get_lens(), Lens::project(), and tri().

Referenced by segment().

## ◆ link_segment_end()

void MeshDrawer::link_segment_end | ( | const LVector4 & | frame,
|  | const LVector4 & | 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 525 of file meshDrawer.cxx.

References tri().

Referenced by segment().

## ◆ particle()

void MeshDrawer::particle | ( | const LVector3 & | pos,
|  | const LVector4 & | frame,
|  | PN_stdfloat | size,
|  | const LVector4 & | color,
|  | PN_stdfloat | 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 155 of file meshDrawer.cxx.

References tri().

Referenced by blended_particle(), and explosion().

## ◆ segment()

void MeshDrawer::segment | ( | const LVector3 & | start,
|  | const LVector3 & | stop,
|  | const LVector4 & | frame,
|  | PN_stdfloat | thickness,
|  | const LVector4 & | 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 228 of file meshDrawer.cxx.

References link_segment(), and link_segment_end().

## ◆ set_budget()

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 58 of file meshDrawer.I.

## ◆ stream()

void MeshDrawer::stream | ( | const LVector3 & | start,
|  | const LVector3 & | stop,
|  | const LVector4 & | frame,
|  | PN_stdfloat | size,
|  | const LVector4 & | _color,
|  | int | number,
|  | PN_stdfloat | 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 336 of file meshDrawer.cxx.

References billboard().

## ◆ tri()

void MeshDrawer::tri | ( | const LVector3 & | v1,
|  | const LVector4 & | c1,
|  | const LVector2 & | uv1,
|  | const LVector3 & | v2,
|  | const LVector4 & | c2,
|  | const LVector2 & | uv2,
|  | const LVector3 & | v3,
|  | const LVector4 & | c3,
|  | const LVector2 & | uv3 )
| inline

Draws a triangle with the given parameters.

Definition at line 75 of file meshDrawer.I.

Referenced by billboard(), cross_segment(), geometry(), link_segment(), link_segment_end(), particle(), and uneven_segment().

## ◆ uneven_segment()

void MeshDrawer::uneven_segment | ( | const LVector3 & | start,
|  | const LVector3 & | stop,
|  | const LVector4 & | frame,
|  | PN_stdfloat | thickness_start,
|  | const LVector4 & | color_start,
|  | PN_stdfloat | thickness_stop,
|  | const LVector4 & | 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 281 of file meshDrawer.cxx.

References tri().

The documentation for this class was generated from the following files:

- panda/src/grutil/meshDrawer.h
- panda/src/grutil/meshDrawer.cxx
- panda/src/grutil/meshDrawer.I