VR-Forces Development_Version Class Documentation
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
DtDiGuyOsgGraphicsLink.h
Go to the documentation of this file.
1 /******************************************************************************
2 ** Copyright (c) 2016 MAK Technologies, Inc.
3 ** All rights reserved.
4 ******************************************************************************/
5 
9 
10 #pragma once
11 
12 #include <vrvDiGuy/vrvDiGuy.h>
13 
14 #include <diguyGraphicsLink.h>
15 
16 #include <vrvCore/DtUniqueID.h>
17 
18 #include <osg/Group>
19 #include <osg/MatrixTransform>
20 #include <osgViewer/View>
21 
22 #include <matrix/vlVector.h>
23 #include <matrix/vlTaitBryan.h>
24 
25 // Enable to turn hard-coded instancing test.
26 //#define DIGUY_INSTANCING
27 
28 class diguyGraphicsState;
29 class DtDiGuyOsgGraphicsShaderProgram;
32 namespace makVrv
33 {
34  class DtDiGuyScenario;
35  class DtDiGuyOsgGraphicsShape;
36  class DtDiGuyOsgGraphicsLink;
37  class DtDe;
38 
40  {
41  public:
42  diguyOsgGraphicsShapeGeodeMap(diguyGraphicsShape * shape, osg::Geode* geode) :
43  m_shape(shape), m_geode(geode)
44  {
45  ;
46  }
47 
49  osg::Geode* m_geode;
50  };
52  {
53  public:
54  diguyOsgGraphicsShapeSwitchMap(diguyGraphicsShape * shape, osg::Switch* switch_node) :
55  m_shape(shape), m_switch(switch_node)
56  {
57  ;
58  }
59 
61  osg::Switch* m_switch;
62  };
63 
64  class DtDiguyOsgRootNode : public osg::MatrixTransform
65  {
66  public :
68  void traverse(osg::NodeVisitor& nv);
69 
71  void add_geode_for_fast_draw(diguyGraphicsShape * shape, osg::Geode* geode, int lod)
72  {
73  if (lod >= m_lod_drawables.size()){
74  m_lod_drawables.resize(lod + 1);
75  }
76  m_lod_drawables[lod].push_back(diguyOsgGraphicsShapeGeodeMap(shape, geode));
77  }
78  void add_switch_for_fast_draw(diguyGraphicsShape * shape, osg::Switch* switch_node)
79  {
80  m_switch_nodes.push_back(diguyOsgGraphicsShapeSwitchMap(shape, switch_node));
81  }
82  std::vector<diguyOsgGraphicsShapeSwitchMap> m_switch_nodes;
83  std::vector<std::vector<diguyOsgGraphicsShapeGeodeMap> > m_lod_drawables;
85  };
86 
90  {
91 
92  public:
94  DtDiGuyOsgGraphicsLink(void* internal_data);
95 
97  virtual ~DtDiGuyOsgGraphicsLink();
98 
102  virtual void build();
103 
107  virtual void unbuild();
108 
112  virtual void update();
113 
114  virtual void update_position();
115 
116  virtual void patch_tbo_data(const osg::Vec3d & camera_pos);
117 
121  virtual void attach_to_scene();
122 
126  virtual void detach_from_scene();
127 
131  virtual void attach_to_link(diguyGraphicsLink* link);
132 
136  virtual void detach_from_link();
137 
141  virtual void set_shader_instance(diguyGraphicsShaderInstance* shader_instance);
142 
143  virtual void instancing_state_changed(int is_instanced);
144 
146  osg::MatrixTransform* getDofNode() {return m_dof_node.get();}
147 
148  static void setDiGuyAttachGroup(DtDiGuyScenario * scenario, osg::Group* diguy_attach_pt, osg::Group* diguy_instancing_attach_pt);
149  static osg::Group* getDiGuyAttachGroup(){return DiguyAttachGroup;}
150 
151  static osg::MatrixTransform* get_instancing_attach_node() { return s_diguy_instancing_attach_pt; }
152 
153  static osgViewer::View* getView() {return staticView; }
154  static void setView(osgViewer::View* view) {staticView = view;}
155 
157  virtual void setPosition(const DtVector& pos, int final_state = 0);
158 
160  virtual void setOrientation(const DtTaitBryan& ori);
161 
163  virtual void setCollisionUniqueId(DtUniqueID id);
164 
165  static void setDe(DtDe * de){s_myDe = de;}
166 
167  virtual void fill_out_tbo_additional_data(diguyGraphicsShape * current_shape, float * tbo_data);
168 
169  protected:
171  friend class DtDiguyOsgRootNode;
172 
174  osg::Geode* makeBoundingSphereVisual(osg::Vec3& center, float radius);
175 
177  osg::ref_ptr<osg::Texture2D> defaultVariationTexture();
178 
179  osg::ref_ptr<osg::MatrixTransform> m_dof_node;
180  osg::ref_ptr<osg::Uniform> m_ufrm_link_matrix;
181  //osg::ref_ptr<osg::Uniform> myUniformInverseTransformMatrix;
182  //osg::ref_ptr<osg::Uniform> myEyePointUniform;
183  //osg::ref_ptr<osg::Uniform> myLightDirectionUniform;
184 
185  osg::ref_ptr<osg::Uniform> m_ufrm_emission_color;
186  osg::ref_ptr<osg::Uniform> m_ufrm_body_weight;
187 
188  osg::ref_ptr<osg::Group> myCollisionBoxGroup;
189  osg::ref_ptr<osg::Geode> myBoundingSphereVisual;
190 
191  static osg::Group* DiguyAttachGroup;
192  static osgViewer::View* staticView;
193  static osg::MatrixTransform* s_diguy_instancing_attach_pt;
194  static DtDe* s_myDe;
195 
197  //DtDiGuyOsgGraphicsShaderProgram* myShaderProgram;
198 
200  DtTaitBryan myOrientation;
201 
203 
204  };
205 
206 
210 
211 }

Document ID: Generated on Mon Jul 4 01:00:18 EDT 2016 from SVN revision 166489
Copyright © 2005-2015 VT MÄK. All Rights Reserved (www.mak.com)