VR-Forces 4.8 Class Documentation
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Groups Pages
DtDiGuyOsgGraphicsLink.h
Go to the documentation of this file.
1 /****************************************************************************
2  * Copyright (c) 2020 VT MAK
3  * All rights reserved.
4  ****************************************************************************/
5 
9 
10 #pragma once
11 
12 #include <vrvDiGuy/vrvDiGuy.h>
13 
14 #include <diguyGraphicsLink.h>
15 #include <diguyGraphicsShape.h>
16 
17 #include <vrvCore/DtUniqueID.h>
18 
19 #include <osg/Group>
20 #include <osg/MatrixTransform>
21 #include <osgViewer/View>
22 
23 #include <matrix/vlVector.h>
24 #include <matrix/vlTaitBryan.h>
25 
27 #include <tbb/atomic.h>
28 
29 // Enable to turn hard-coded instancing test.
30 //#define DIGUY_INSTANCING
31 
32 class diguyGraphicsState;
33 class DtDiGuyOsgGraphicsShaderProgram;
36 
37 namespace makVrv
38 {
39  class DtDiGuyScenario;
40  class DtDiGuyOsgGraphicsShape;
41  class DtDiGuyOsgGraphicsLink;
42  class DtDe;
43  class DtDiGuyOsgRootNode;
44  class DtDiGuyOsgGraphicsInstanceGroup;
45  class DtDiGuyInstanceDrawable;
46 
50  {
52  diguyOsgGraphicsShapeGeodePair(diguyGraphicsShape* shape, osg::Geode* geode);
54  osg::Geode* m_geode;
55  };
56 
60  {
62  diguyOsgGraphicsShapeSwitchPair(diguyGraphicsShape* shape, osg::Switch* switch_node);
63 
65  osg::Switch* m_switch;
66  bool m_flash;
67  };
68 
71  class DtCollisionBoxGeode : public osg::Geode
72  {
73  public:
76 
78  DtCollisionBoxGeode(const DtCollisionBoxGeode& copy, const osg::CopyOp& copyop = osg::CopyOp::SHALLOW_COPY);
79 
81 
83  virtual void traverse(osg::NodeVisitor& nv);
84  };
85 
90  {
92  virtual osg::BoundingSphere computeBound(const osg::Node& node) const;
93 
95  };
96 
99  class DtDiGuyOsgRootNode : public osg::MatrixTransform
100  {
101  public :
105  virtual ~DtDiGuyOsgRootNode();
107  virtual void unbuild();
109  virtual void traverse(osg::NodeVisitor& nv);
110 
112  void add_geode_for_fast_draw(diguyGraphicsShape* shape, osg::Geode* geode, int lod);
114  void add_switch_for_fast_draw(diguyGraphicsShape* shape, osg::Switch* switch_node);
117 
119  virtual void setOctreeNode(DtOctreeNode<float64>* node);
121  virtual DtOctreeNode<float64>* octreeNode() const;
122 
124  virtual void setScenario(DtDiGuyScenario* scenario);
126  virtual DtDiGuyScenario* scenario();
127 
129  virtual void setPositionAndOrientation(const DtVector& pos, const DtTaitBryan& orient);
130 
132  virtual void setIsOccupant(bool occ) { myOccupant = occ; }
133 
135  diguyCharacter* character();
138  inline const DtVector& position() { return myWorldPosition; }
140  inline const DtTaitBryan& orientation() { return myWorldOrientation; }
142  inline const osg::Quat& quat() { return myQuat; }
144  inline bool isOccupant() { return myOccupant; }
145 
147  inline void setLastTraversal(unsigned int lastTrav) { myLastTraversal = lastTrav; }
149  inline unsigned int lastTraversal() { return myLastTraversal; }
150 
151 
152  protected:
153  std::vector<diguyOsgGraphicsShapeSwitchPair> m_switch_nodes;
154  std::vector<std::vector<diguyOsgGraphicsShapeGeodePair> > m_lod_drawables;
156 
157  unsigned int myLastTraversal;
162 
164  DtTaitBryan myWorldOrientation;
165  osg::Quat myQuat;
166 
167  };
168 
172  {
173  public:
174 
176  DtDiGuyOsgGraphicsLink(void* internal_data);
177 
179  virtual ~DtDiGuyOsgGraphicsLink();
180 
184  virtual void build();
185 
189  virtual void unbuild();
190 
194  virtual void update();
195 
196  virtual void update_position();
197 
199  virtual void patch_tbo_data(const osg::Vec3d& camera_pos);
200 
204  virtual void attach_to_scene();
205 
209  virtual void detach_from_scene();
210 
214  virtual void attach_to_link(diguyGraphicsLink* link);
215 
219  virtual void detach_from_link();
220 
224  virtual void set_shader_instance(diguyGraphicsShaderInstance* shader_instance);
225 
227  virtual void instancing_state_changed(int is_instanced);
228 
230  virtual void fill_out_tbo_additional_data(diguyGraphicsShape* current_shape, float* tbo_data);
231 
233  osg::MatrixTransform* getDofNode();
234 
237 
239  virtual void set_allow_motion_offsets(bool allow);
241  virtual bool get_allow_motion_offsets() const;
242 
244  virtual void setPositionAndOrientation(const DtVector& pos, const DtTaitBryan& ori);
245 
247  virtual void setCollisionUniqueId(DtUniqueID id);
248 
250  virtual osg::Uniform* getOrCreateLinkMatrixUniform();
251 
253  osg::Geode* boundingSphereVisual();
254 
255  public:
257  static void setDiGuySharedNodes(DtDiGuyScenario* scenario, osg::Group* diguy_attach_pt, osg::MatrixTransform* diguy_instancing_attach_pt,
259 
261  static osg::Group* getDiGuyAttachGroup();
262 
264  static osg::MatrixTransform* get_instancing_attach_node();
265 
268 
269  protected:
270 
272  osg::Geode* makeBoundingSphereVisual(osg::Vec3& center, float radius);
273 
274  protected:
275 
277  //osg::ref_ptr<osg::Texture2D> defaultVariationTexture();
278 
281 
284 
287 
289 
291 
293 
294  protected:
295  static osg::Group* the_diguy_attach_group;
296  static osg::MatrixTransform* the_diguy_instancing_attach_pt;
298 
299  };
300 
301 
305 
306 }
diguyGraphicsLink * DtDiGuyOsgGraphicsLink_create_func(void *internal_data)
Creator function registered with DI-Guy to override default diguyGraphicsLink Registered in DtDiGuyFu...
const DtTaitBryan & orientation()
vrv orientation
Definition: DtDiGuyOsgGraphicsLink.h:140
virtual void setScenario(DtDiGuyScenario *scenario)
set DtDiGuyScenario object associated with this character
void setLastTraversal(unsigned int lastTrav)
used to figure out if the character has been visited yet this frame.
Definition: DtDiGuyOsgGraphicsLink.h:147
virtual void unbuild()
called by link::unbuild()
DtDiGuyOsgGraphicsLink * m_link
Definition: DtDiGuyOsgGraphicsLink.h:155
DtDiGuyScenario * myScenario
Definition: DtDiGuyOsgGraphicsLink.h:161
META_Node(osg, DtCollisionBoxGeode)
OctreeNode class.
Definition: DtOctreeNode.h:21
virtual DtDiGuyScenario * scenario()
get DtDiGuyScenario object associated with this character
virtual void setPositionAndOrientation(const DtVector &pos, const DtTaitBryan &orient)
updates myWorldPosition, myWorldOrientation, myQuat, doesn&#39;t do anything else
virtual DtOctreeNode< float64 > * octreeNode() const
gets octree node associated with this character
DtTaitBryan myWorldOrientation
Definition: DtDiGuyOsgGraphicsLink.h:164
void add_geode_for_fast_draw(diguyGraphicsShape *shape, osg::Geode *geode, int lod)
caches a drawable for drawing quickly
float myMinDrawDistance
Definition: DtDiGuyOsgGraphicsLink.h:158
Custom per character root node that does custom traversals and short circuits osg lod picking...
Definition: DtDiGuyOsgGraphicsLink.h:99
diguyGraphicsShape * m_shape
Definition: DtDiGuyOsgGraphicsLink.h:53
struct for associating a shape with a geode for removal.
Definition: DtDiGuyOsgGraphicsLink.h:49
const DtVector & position()
perf critical position of character
Definition: DtDiGuyOsgGraphicsLink.h:138
std::vector< diguyOsgGraphicsShapeSwitchPair > m_switch_nodes
Definition: DtDiGuyOsgGraphicsLink.h:153
const osg::Quat & quat()
cached osg style orientation
Definition: DtDiGuyOsgGraphicsLink.h:142
Contains DLL export macros.
unsigned int lastTraversal()
used to figure out if the character has been visited yet this frame.
Definition: DtDiGuyOsgGraphicsLink.h:149
DtDiGuyOsgRootNode & myRoot
Definition: DtDiGuyOsgGraphicsLink.h:94
DtDiGuyCharacterBoundingCallback(DtDiGuyOsgRootNode &root)
Derived diguyGraphicsState to create OSG state from DI-Guy state.
Definition: DtDiGuyOsgGraphicsState.h:18
bool m_flash
Definition: DtDiGuyOsgGraphicsLink.h:66
void remove_shape(DtDiGuyOsgGraphicsShape *shape)
cleans up geodes and shapes
Per link approximation for collision.
Definition: DtDiGuyOsgGraphicsLink.h:71
Class declaration.
Definition: DtDiGuyOsgGraphicsShaderInstance.h:26
unsigned int myLastTraversal
Definition: DtDiGuyOsgGraphicsLink.h:157
diguyGraphicsShape * m_shape
Definition: DtDiGuyOsgGraphicsLink.h:64
DtOctree class.
osg::Quat myQuat
Definition: DtDiGuyOsgGraphicsLink.h:165
virtual void setOctreeNode(DtOctreeNode< float64 > *node)
set octree node associated with this character
virtual void setIsOccupant(bool occ)
is this a non-moving character in a vehicle
Definition: DtDiGuyOsgGraphicsLink.h:132
bool myOccupant
Definition: DtDiGuyOsgGraphicsLink.h:159
virtual ~DtDiGuyOsgRootNode()
DTOR.
Override of diguyGraphicsShape to create OSG geometry for DI-Guy shapes.
Definition: DtDiGuyOsgGraphicsShape.h:26
osg::Geode * m_geode
Definition: DtDiGuyOsgGraphicsLink.h:54
std::vector< std::vector< diguyOsgGraphicsShapeGeodePair > > m_lod_drawables
Definition: DtDiGuyOsgGraphicsLink.h:154
virtual osg::BoundingSphere computeBound(const osg::Node &node) const
unsigned long long DtUniqueID
Definition: DtUniqueID.h:22
struct for associating a shape with a switch node for fast updates
Definition: DtDiGuyOsgGraphicsLink.h:59
virtual void traverse(osg::NodeVisitor &nv)
override of base osg code
osg::Switch * m_switch
Definition: DtDiGuyOsgGraphicsLink.h:65
Contains makVrv::DtUniqueID type.
Class that renders all the diguy instance objects in one osg drawable, major performance improvement...
Definition: DtDiGuyInstanceDrawable.h:26
DtVector myWorldPosition
Definition: DtDiGuyOsgGraphicsLink.h:163
diguyCharacter * character()
gets diguy character
DtOctreeNode< float64 > * myOctreeNode
Definition: DtDiGuyOsgGraphicsLink.h:160
Custom root node bbox callback to avoid traversing down the model.
Definition: DtDiGuyOsgGraphicsLink.h:89
DtDiGuyOsgRootNode(DtDiGuyOsgGraphicsLink *link)
CTOR.
diguyOsgGraphicsShapeSwitchPair(diguyGraphicsShape *shape, osg::Switch *switch_node)
CTOR.
bool isOccupant()
is this a fake person in a vehicle
Definition: DtDiGuyOsgGraphicsLink.h:144
void add_switch_for_fast_draw(diguyGraphicsShape *shape, osg::Switch *switch_node)
adding a switch for fast drawing
virtual void traverse(osg::NodeVisitor &nv)
traverse function
diguyOsgGraphicsShapeGeodePair(diguyGraphicsShape *shape, osg::Geode *geode)
CTOR.
Owns a DiGuy scenario for the application.
Definition: DtDiGuyScenario.h:73

Document ID: Generated on Thu Aug 27 10:56:05 EDT 2020 from SVN revision 217100
Copyright © 2005-2020 MAK Technologies. All Rights Reserved (www.mak.com)