KJB
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
gr_renderable.h
Go to the documentation of this file.
1 
34 /* =========================================================================== *
35 |
36 | Copyright (c) 1994-2008 by Kobus Barnard (author).
37 |
38 | Personal and educational use of this code is granted, provided that this
39 | header is kept intact, and that the authorship is not misrepresented, that
40 | its use is acknowledged in publications, and relevant papers are cited.
41 |
42 | For other use contact the author (kobus AT cs DOT arizona DOT edu).
43 |
44 | Please note that the code in this file has not necessarily been adequately
45 | tested. Naturally, there is no guarantee of performance, support, or fitness
46 | for any particular task. Nonetheless, I am interested in hearing about
47 | problems that you encounter.
48 |
49 | Authors:
50 | Joseph Schlecht, Luca Del Pero, Kyle Simek
51 |
52 * =========================================================================== */
53 
63 #ifndef KJB_RENDERABLE_H
64 #define KJB_RENDERABLE_H
65 
66 #include <m_cpp/m_matrix.h>
67 #include <l_cpp/l_exception.h>
68 
69 namespace kjb {
70 
71 class Base_gl_interface;
72 
79 {
80 public:
82  virtual ~Renderable() { }
83 
84 
86  virtual void render() const = 0;
87 };
88 
89 
96 {
97 public:
99  virtual ~Wire_renderable() { }
100 
101 
103  virtual void wire_render() const = 0;
104 };
105 
112 {
113 public:
114 
116  virtual ~Solid_renderable() { }
117 
118 
120  virtual void solid_render() const = 0;
121 };
122 
123 
131 {
132 public:
133 
136 
137 
142  virtual void wire_occlude_render() const = 0;
143 };
144 
145 
152  public Solid_renderable,
153  public Wire_renderable,
155 {
156 public:
157 
159  virtual ~Abstract_renderable() { }
160 
161  virtual void render() const
162  {
163  solid_render();
164  }
165 
171 
176  static void set_rendering_framework(unsigned int irf)
177  {
178  _rendering_framework = irf;
179  }
180 
185  virtual void render_occluded_wireframe() const
186  {
188  wire_render();
189  }
190 
195  virtual void silhouette_render(const kjb::Base_gl_interface &, double width) const
196  {
197  width = width + 0.0; //This is to avoid a warning
199  }
200 
201 protected:
203  {
205  };
206 
211  static unsigned int _rendering_framework;
212 };
213 
235 {
236 public:
237 
239  virtual void wire_render() const;
240 
242  virtual void wire_occlude_render() const
243  {
244  _opengl_offset_edge(0, 0);
245  }
247  virtual void wire_occlude_render(double offset_factor, double offset_units) const
248  {
249  _opengl_offset_edge(offset_factor, offset_units);
250  }
251 
253  virtual void solid_render() const = 0;
254 
255 
264  static void set_background_color(const Vector& rgba)
265  {
266  background_color = rgba;
267  }
268 
277  static void set_foreground_color(const Vector& rgba)
278  {
279  foreground_color = rgba;
280  }
281 
282 protected:
284  void _opengl_stencil_edge(bool hollow = true) const;
285 
287  void _opengl_offset_edge(double offset_factor = 0, double offset_units = 0) const;
288 
289 private:
290  static Vector background_color;
291  static Vector foreground_color;
292 };
293 
294 
295 
305 {
306 public:
308 
310  m_model(model)
311  {
312  IFT(m_model != NULL, Illegal_argument, "Given model is NULL.");
313  }
314 
315  virtual void render() const
316  {
317  IFT(m_model != NULL, KJB_error, "Model not set.");
318  render(*m_model);
319  }
320 
321  virtual void render(const Generic_renderable&) const = 0;
322 
323  virtual void operator()(const Generic_renderable& model) const
324  {
325  render(model);
326  }
327 protected:
329 };
330 
340 {
341 public:
346 
347  Renderer(const Generic_renderable* model) :
348  Generic_renderer(model) {}
349 
350  virtual void render(const Generic_renderable& model) const
351  {
352  model.render();
353  }
354 };
355 
364 {
365 public:
370 
372  Generic_renderer(model) {}
373 
374  virtual void render(const Generic_renderable& model) const
375  {
376  model.wire_render();
377  }
378 };
379 
388 {
389 public:
403  Wire_occlude_renderer(float offset_factor = 0, float offset_units = 0) :
405  m_offset_factor(offset_factor),
406  m_offset_units(offset_units)
407  {}
408 
422  Wire_occlude_renderer(const Generic_renderable* model, float offset_factor = 0, float offset_units = 0) :
423  Generic_renderer(model),
424  m_offset_factor(offset_factor),
425  m_offset_units(offset_units)
426  {}
427 
428 
429  void set_factor(float f) { m_offset_factor = f; }
430  void set_units(float u) { m_offset_units = u; }
431 
432  virtual void render(const Generic_renderable& model) const
433  {
435  }
436 protected:
439 };
440 
442 
451 {
452 public:
458  Generic_renderer(model) {}
459 
460 
461  void render(const Generic_renderable& model) const
462  {
463  model.render();
464  }
465 };
466 
473 {
474 public:
475  virtual void render(const kjb::Generic_renderer& renderer) const = 0;
476 
477  void render() const
478  {
479  return render(kjb::Solid_renderer());
480  }
481 
482  void solid_render() const
483  {
484  return render(kjb::Solid_renderer());
485  }
486 
487  void wire_renderer() const
488  {
489  return render(kjb::Wire_renderer());
490  }
491 
493  {
495  }
496 
497 
498 };
499 
500 // ///////////////////////////////////////////////////////
501 // Multi-view renderables
502 //
503 // These are mostly analagous to the Renderables above,
504 // with the additional ability to represent multiple
505 // views of a scene, and switch between the active view
506 // to be rendered.
507 // ////////////////////////////////////////////////////////
508 
516 class Mv_renderable : public Renderable
517 {
518 public:
519 
521  virtual ~Mv_renderable() { }
522 
524  virtual size_t num_views() const = 0;
525 
529  virtual void set_active_view(size_t i) const = 0;
530 
532  virtual void render() const = 0;
533 };
534 
540 { };
541 
542 
548 {
549 public:
551  float offset_factor = 0, float offset_units = 0) :
552  m_model(model),
553  m_offset_factor(offset_factor),
554  m_offset_units(offset_units)
555  { }
556 
557  size_t num_views() const { return m_model->num_views(); }
558  void set_active_view(size_t i) const { m_model->set_active_view(i); }
559 
560  void render() const
561  {
563  }
564 public:
568 };
569 
575 {
576 public:
578  m_model(model)
579  { }
580 
581  size_t num_views() const { return m_model->num_views(); }
582  void set_active_view(size_t i) const { m_model->set_active_view(i); }
583 
584  void render() const
585  {
586  m_model->wire_render();
587  }
588 public:
592 };
593 
599 {
600 public:
602  m_model(model)
603  { }
604 
605  size_t num_views() const { return m_model->num_views(); }
606  void set_active_view(size_t i) const { m_model->set_active_view(i); }
607 
608  void render() const
609  {
611  }
612 public:
616 };
617 
618 }
619 
620 
621 #endif
Definition: gr_renderable.h:204
void _opengl_offset_edge(double offset_factor=0, double offset_units=0) const
General edge_rendering algorithm using polygon offset.
Definition: gr_renderable.cpp:81
virtual void render(const Generic_renderable &model) const
Definition: gr_renderable.h:432
static unsigned int _rendering_framework
Definition: gr_renderable.h:211
Definition: gr_renderable.h:450
static void set_background_color(const Vector &rgba)
Definition: gr_renderable.h:264
Wire_renderer()
Definition: gr_renderable.h:369
void _opengl_stencil_edge(bool hollow=true) const
General edge-rendering algorithm using stencil buffer.
Definition: gr_renderable.cpp:140
virtual size_t num_views() const =0
Returns the number of views for this object.
Mv_wire_occlude_render_wrapper(const Mv_generic_renderable *model, float offset_factor=0, float offset_units=0)
Definition: gr_renderable.h:550
float m_offset_factor
Definition: gr_renderable.h:437
Definition for the Matrix class, a thin wrapper on the KJB Matrix struct and its related functionalit...
virtual ~Wire_occlude_renderable()
Deletes this Wire_occlude_renderable.
Definition: gr_renderable.h:135
Solid_renderer(const Generic_renderable *model)
Definition: gr_renderable.h:457
virtual void wire_render() const
Render wire mesh.
Definition: gr_renderable.cpp:44
Definition: gr_renderable.h:574
static void set_foreground_color(const Vector &rgba)
Definition: gr_renderable.h:277
virtual void render() const =0
Renders this object with GL.
void wire_renderer() const
Definition: gr_renderable.h:487
void solid_render() const
Render solid object.
Definition: gr_renderable.h:482
Mv_solid_render_wrapper(const Mv_generic_renderable *model)
Definition: gr_renderable.h:601
virtual void render() const
Renders this object with GL.
Definition: gr_renderable.h:161
Wire_occlude_renderer Silhouette_renderer
Definition: gr_renderable.h:441
Abstract class to render this object with GL.
Definition: gr_renderable.h:78
virtual ~Renderable()
Deletes this Renderable.
Definition: gr_renderable.h:82
void wire_occlude_renderer() const
Definition: gr_renderable.h:492
virtual void wire_render() const =0
Renders this object with GL as a wire-frame.
float m_offset_factor
Definition: gr_renderable.h:614
Definition: gr_renderable.h:339
const Generic_renderable * m_model
Definition: gr_renderable.h:328
virtual ~Mv_renderable()
Deletes this Renderable.
Definition: gr_renderable.h:521
This class implements vectors, in the linear-algebra sense, with real-valued elements.
Definition: m_vector.h:87
Definition: gr_renderable.h:598
const Mv_generic_renderable * m_model
Definition: gr_renderable.h:565
static void set_rendering_framework(unsigned int irf)
sets the rendering framework used to render. The only one implemented up to now is OpenGL ...
Definition: gr_renderable.h:176
virtual void operator()(const Generic_renderable &model) const
Definition: gr_renderable.h:323
const Mv_generic_renderable * m_model
Definition: gr_renderable.h:589
void render(const Generic_renderable &model) const
Definition: gr_renderable.h:461
static double get_rendering_framework()
returns the rendering framework used to render. The only one implemented up to now is OpenGL ...
Definition: gr_renderable.h:170
Wire_renderer(const Generic_renderable *model)
Definition: gr_renderable.h:371
virtual void wire_occlude_render() const
Render silhouette edges.
Definition: gr_renderable.h:242
#define IFT(a, ex, msg)
Definition: l_exception.h:101
Renderer(const Generic_renderable *model)
Definition: gr_renderable.h:347
virtual void render() const
Renders this object with GL.
Definition: gr_renderable.h:315
Wire_occlude_renderer(const Generic_renderable *model, float offset_factor=0, float offset_units=0)
Definition: gr_renderable.h:422
Definition: gr_renderable.h:151
Solid_renderer()
Definition: gr_renderable.h:456
void render() const
Renders this object with GL.
Definition: gr_renderable.h:608
Definition: gr_renderable.h:387
Abstract class to render this object with GL as an occluded wire-frame into the depth buffer...
Definition: gr_renderable.h:130
Definition: gr_renderable.h:539
Mv_wire_render_wrapper(const Mv_generic_renderable *model)
Definition: gr_renderable.h:577
virtual void wire_occlude_render(double offset_factor, double offset_units) const
Render silhouette edges.
Definition: gr_renderable.h:247
virtual void set_active_view(size_t i) const =0
Choose a view of this object to render. Active model is not considered part of object state...
size_t num_views() const
Returns the number of views for this object.
Definition: gr_renderable.h:581
float m_offset_units
Definition: gr_renderable.h:567
virtual void wire_occlude_render() const =0
Renders this object with GL as a wireframe occluding hidden lines.
Generic_renderer()
Definition: gr_renderable.h:307
Renderer()
Definition: gr_renderable.h:345
const Mv_generic_renderable * m_model
Definition: gr_renderable.h:613
Definition: gr_renderable.h:472
virtual void render(const Generic_renderable &model) const
Definition: gr_renderable.h:374
Definition: gr_renderable.h:304
Exception often thrown when wrapped C functions return error codes.
Definition: l_exception.h:262
float m_offset_units
Definition: gr_renderable.h:438
void set_active_view(size_t i) const
Choose a view of this object to render. Active model is not considered part of object state...
Definition: gr_renderable.h:582
Generic_renderer(const Generic_renderable *model)
Definition: gr_renderable.h:309
Definition: gr_renderable.h:363
Definition: gr_camera.h:103
Wire_occlude_renderer(float offset_factor=0, float offset_units=0)
Definition: gr_renderable.h:403
float m_offset_factor
Definition: gr_renderable.h:566
float m_offset_units
Definition: gr_renderable.h:615
Abstract class to render an object that has many possible views.
Definition: gr_renderable.h:516
Abstract class to render this object with GL.
Definition: gr_renderable.h:111
Object thrown when an argument to a function is not acceptable.
Definition: l_exception.h:377
virtual ~Solid_renderable()
Deletes this Wire_renderable.
Definition: gr_renderable.h:116
virtual ~Abstract_renderable()
Deletes this Solid_renderable.
Definition: gr_renderable.h:159
size_t num_views() const
Returns the number of views for this object.
Definition: gr_renderable.h:557
get the indices of edges in each direction for i
Definition: APPgetLargeConnectedEdges.m:48
virtual ~Wire_renderable()
Deletes this Wire_renderable.
Definition: gr_renderable.h:99
void render() const
Renders this object with GL.
Definition: gr_renderable.h:477
virtual void render() const =0
Renders this object with GL.
void render() const
Renders this object with GL.
Definition: gr_renderable.h:584
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 wirefr...
Definition: gr_renderable.h:195
Support for error handling exception classes in libKJB.
void set_active_view(size_t i) const
Choose a view of this object to render. Active model is not considered part of object state...
Definition: gr_renderable.h:558
Rendering_frameworks
Definition: gr_renderable.h:202
void render() const
Renders this object with GL.
Definition: gr_renderable.h:560
size_t num_views() const
Returns the number of views for this object.
Definition: gr_renderable.h:605
Definition: gr_renderable.h:233
void set_active_view(size_t i) const
Choose a view of this object to render. Active model is not considered part of object state...
Definition: gr_renderable.h:606
Definition: gr_renderable.h:547
virtual void solid_render() const =0
Render solid object.
Abstract class to render this object with GL as a wire-frame.
Definition: gr_renderable.h:95
virtual void solid_render() const =0
Renders this object with GL as a wire-frame.
void set_units(float u)
Definition: gr_renderable.h:430
float m_offset_factor
Definition: gr_renderable.h:590
virtual void render(const Generic_renderable &model) const
Definition: gr_renderable.h:350
float m_offset_units
Definition: gr_renderable.h:591
void set_factor(float f)
Definition: gr_renderable.h:429
virtual void render_occluded_wireframe() const
Renders this object with GL as an occluded wire-frame into the depth buffer, to hide unseen lines...
Definition: gr_renderable.h:185