KJB
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
Public Member Functions | Static Public Member Functions | Protected Member Functions | List of all members
kjb::Generic_renderable Class Referenceabstract

#include <gr_renderable.h>

Inheritance diagram for kjb::Generic_renderable:
kjb::Abstract_renderable kjb::Renderable kjb::Solid_renderable kjb::Wire_renderable kjb::Wire_occlude_renderable kjb::Mv_generic_renderable kjb::Renderer_renderable

Public Member Functions

virtual void wire_render () const
 Render wire mesh. More...
 
virtual void wire_occlude_render () const
 Render silhouette edges. More...
 
virtual void wire_occlude_render (double offset_factor, double offset_units) const
 Render silhouette edges. More...
 
virtual void solid_render () const =0
 Render solid object. More...
 
- Public Member Functions inherited from kjb::Abstract_renderable
virtual ~Abstract_renderable ()
 Deletes this Solid_renderable. More...
 
virtual void render () const
 Renders this object with GL. More...
 
virtual void render_occluded_wireframe () const
 Renders this object with GL as an occluded wire-frame into the depth buffer, to hide unseen lines. More...
 
virtual void silhouette_render (const kjb::Base_gl_interface &, double width) const
 Renders the silhouette of this object. The most basic implementation is to render the occluded wireframe. More...
 
- Public Member Functions inherited from kjb::Renderable
virtual ~Renderable ()
 Deletes this Renderable. More...
 
- Public Member Functions inherited from kjb::Solid_renderable
virtual ~Solid_renderable ()
 Deletes this Wire_renderable. More...
 
- Public Member Functions inherited from kjb::Wire_renderable
virtual ~Wire_renderable ()
 Deletes this Wire_renderable. More...
 
- Public Member Functions inherited from kjb::Wire_occlude_renderable
virtual ~Wire_occlude_renderable ()
 Deletes this Wire_occlude_renderable. More...
 

Static Public Member Functions

static void set_background_color (const Vector &rgba)
 
static void set_foreground_color (const Vector &rgba)
 
- Static Public Member Functions inherited from kjb::Abstract_renderable
static double get_rendering_framework ()
 returns the rendering framework used to render. The only one implemented up to now is OpenGL More...
 
static void set_rendering_framework (unsigned int irf)
 sets the rendering framework used to render. The only one implemented up to now is OpenGL More...
 

Protected Member Functions

void _opengl_stencil_edge (bool hollow=true) const
 General edge-rendering algorithm using stencil buffer. More...
 
void _opengl_offset_edge (double offset_factor=0, double offset_units=0) const
 General edge_rendering algorithm using polygon offset. More...
 

Additional Inherited Members

- Protected Types inherited from kjb::Abstract_renderable
enum  Rendering_frameworks { RI_OPENGL }
 
- Static Protected Attributes inherited from kjb::Abstract_renderable
static unsigned int _rendering_framework = kjb::Abstract_renderable::RI_OPENGL
 

Detailed Description

This class is for objects which have all forms of renderability, and provides some default implementation for wire and occluded wire rendering.

The inherited class need only implement solid_render() – wire rendering and occluded wire rendering are implemented using solid_render(). The provided method for occluded wire rendering doesn't draw interior edges, only sillhouette edges are drawn. Inherited classes are free to uoverride this functionality if desired.

Inherited classes only need to implement solid_render() to get all three types of rendering. Optionally, the inherited class may choose between the two methods for occluded edge rendering offered by Generic_renderable, to balance speed and quality, or implement its own method.

Author
Kyle Simek

Member Function Documentation

void Generic_renderable::_opengl_offset_edge ( double  offset_factor = 0,
double  offset_units = 0 
) const
protected

General edge_rendering algorithm using polygon offset.

Render object edges using our "offset" method.

  1. Render solid model
  2. Render full wireframe behind solid model with width=2

Pros:

  • Fast: Uses graphics hardware and only requires one extra render pass
  • Clean outlines: single pixel width, no missing pixels
  • works better for nurbs surfaces Cons:
  • Outlines are 1 pixel larger than object
  • Doesn't draw crease edges
  • need to set polygon offset right to avoid internal edges from appearing.
Parameters
offset_factor"factor" parameter to glPolygonOffset
offset_units"units" parameter to glPolygonOffset
Note
Caller must set line color using glColor before calling this

If internal edges show through, try increasing factor or units

Assumes: GL_DEPTH_TEST is enabled glColor3f is set to something other than white

void Generic_renderable::_opengl_stencil_edge ( bool  hollow = true) const
protected

General edge-rendering algorithm using stencil buffer.

Inexpensive, general purpose silhouette edge rendering using opengl stencils.

Benefits: Fast: Silhouettes computed in graphics hardware No knowledge of geometry necessary. Drawbacks: Slow: Requires rendering the model 3 times (4 if hollow) Doesn't draw crease edges; Some double-width edges at orthogonal surfaces Edge pixels not so good with nurbs

Parameters
hollowset to true if both sides of a polygon are visible. Enabling roughly doubles render time.
static void kjb::Generic_renderable::set_background_color ( const Vector rgba)
inlinestatic

Set the "transparent" color. Pixels lying in the interior of the object will be rendered this color

Default is white.

Kludge:
Added this during CVPR 2010 to get white-on-black edges for GPU-based chamfer likelihood. Needs a better design decision. –Kyle
static void kjb::Generic_renderable::set_foreground_color ( const Vector rgba)
inlinestatic

Set the edge color. Pixels lying on the border of the object's silhouette will be this color.

Default is black.

Kludge:
Added this during CVPR 2010 to get white-on-black edges for GPU-based chamfer likelihood. Needs a better design decision. –Kyle
virtual void kjb::Generic_renderable::solid_render ( ) const
pure virtual

Render solid object.

Implements kjb::Solid_renderable.

Implemented in kjb::Renderer_renderable.

virtual void kjb::Generic_renderable::wire_occlude_render ( ) const
inlinevirtual

Render silhouette edges.

Implements kjb::Wire_occlude_renderable.

virtual void kjb::Generic_renderable::wire_occlude_render ( double  offset_factor,
double  offset_units 
) const
inlinevirtual

Render silhouette edges.

void Generic_renderable::wire_render ( ) const
virtual

Render wire mesh.

Implements kjb::Wire_renderable.


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