VR-Forces 5.0.3 Developer's Guide
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Groups Pages
DtFxForce.h
Go to the documentation of this file.
1 /******************************************************************************
2 ** Copyright (c) 2019 MAK Technologies, Inc.
3 ** All rights reserved.
4 ******************************************************************************/
5 
9 
10 #pragma once
11 
12 #include <libvecmat_float.h>
13 #include <bdiFarPosition.h>
14 
15 #include <bdi_simple_templates.h>
16 
17 #include <vrvFx/vrvFx.h>
18 
19 #include <vrvFx/DtFxScriptData.h>
20 
22 #include <osgEarth/SimplexNoise>
23 
24 class bdiVec3fArray;
25 class bdiVec4fArray;
26 class bdiCfgEntry;
27 
28 namespace makVrv
29 {
30  struct DtFxParticle;
31  class DtFxParticleSystem;
32 
36  {
37  public:
39  DtFxForce();
41  DtFxForce(const DtFxForce& rhs);
43  DtFxForce& operator=(const DtFxForce&);
45  virtual ~DtFxForce() { ; }
46 
48  virtual bdiCfgEntry* create_cfg_entry() const;
50  virtual int read_cfg_entries(bdiCfgEntry* cfg_entry);
51 
53  virtual void setParticleManager(DtFxParticleSystemManager* manager) { m_particle_manager = manager; }
54 
56  virtual void setPosition(double x, double y, double z);
57  virtual void setPosition(const bdiFarPosition& pos) { m_position = pos; }
58 
60  const bdiFarPosition& position() const { return m_position; }
62  virtual void setSourceSystem(DtFxParticleSystem* system) { m_source_system = system; }
63 
65  virtual void setSourceForce(DtFxForce* force) { m_source_force = force; }
66  virtual DtFxForce* sourceForce() const { return m_source_force; }
67 
69  virtual void setRadius(float radius) { m_radius = radius; }
70  virtual float radius() const { return m_radius; };
71 
73  virtual void setForceType(ForceType forceType) { m_force_type = forceType; }
74  virtual ForceType forceType() const { return m_force_type; }
75 
77  virtual void setFalloffType(FalloffType falloffType) { m_falloff_type = falloffType; }
78  virtual FalloffType falloffType() const { return m_falloff_type; }
79 
81  virtual void setForceStrength(float str) { m_force = str; }
82  virtual float forceStrength() const { return m_force; }
83 
85  virtual void setForceDirection(float x, float y, float z) { m_direction = bdiVec3f(x, y, z); }
86  virtual const bdiVec3f& forceDirection() const { return m_direction; }
87 
89  virtual void setGlobalForce(bool global) { m_global_force = global; }
90  virtual bool globalForce() const { return m_global_force; }
91 
93  virtual void render_into_vbo(const bdiFarPosition& eyePoint, const bdiFarPosition& globalPos,
94  const bdiMat4f& geocentricMat, const bdiMat4f& geocentricMatInv,
95  bdiVec3fArray& verts, bdiVec4fArray& colors) const;
96 
98  virtual void render_into_vbo(const bdiFarPosition& eyePoint, bdiVec3fArray& verts, bdiVec4fArray& colors) const;
99 
101  virtual float calcBoundingRadius() const;
102 
104  virtual void updateGlobalPosition(const bdiFarPosition& position,
105  const bdiMat4f& geocentricMat, const bdiMat4f& geocentricMatInv);
106 
108  const bdiString& forceScript() const { return myForceScript; }
109 
111  virtual void updateForceStrength();
112 
113  void applyForceGeocentric(const DtFxParticleSystem* system, float quantum,
114  const bdiFarPosition& currentForcePosition, const bdiMat4f& geocentricMat, const bdiMat4f& geocentricMatInv,
115  const bdiVec3f& upVec, DtFxParticle* pParticle, float particle_mass) const;
116 
117  void applyForceFlatEarth(const DtFxParticleSystem* system, float quantum,
118  const bdiFarPosition& currentForcePosition,
119  const bdiVec3f& upVec, DtFxParticle* pParticle, float particle_mass) const;
120 
121  inline const bdiMat4f& geocentricMat() const { return myGeocentricMat; }
122  inline const bdiMat4f& geocentricMatInv() const { return myGeocentricMatInv; }
123 
126 
127  protected:
129  bdiFarPosition m_position;
130  bdiFarPosition m_last_geoc_position;
131  float m_force;
132  float m_radius;
133  bdiVec3f m_direction;
139  // global
140  bdiMat4f myGeocentricMat;
142 
143  bdiString myForceScript;
145 
146  static osgEarth::Util::SimplexNoise theNoise;
147 
148  };
149 }
150 
151 #ifdef LIBBDIOBJECT_ARRAY_TYPE
152 #undef LIBBDIOBJECT_ARRAY_TYPE
153 #endif
154 #ifdef LIBBDIOBJECT_ARRAY_CLASS_NAME
155 #undef LIBBDIOBJECT_ARRAY_CLASS_NAME
156 #endif
157 #ifdef LIBBDIOBJECT_ARRAY_DECLSPEC_bdiutil
158 #undef LIBBDIOBJECT_ARRAY_DECLSPEC_bdiutil
159 #endif
160 
161 #define LIBBDIOBJECT_ARRAY_TYPE makVrv::DtFxForce
162 #define LIBBDIOBJECT_ARRAY_CLASS_NAME DtFxForceArray
163 #define LIBBDIOBJECT_ARRAY_INLINE
164 #define LIBBDIOBJECT_ARRAY_DISABLE_BOUNDS_CHECKING
165 
168 
169 #undef LIBBDIOBJECT_ARRAY_DISABLE_BOUNDS_CHECKING
170 #undef LIBBDIOBJECT_ARRAY_INLINE
171 #undef LIBBDIOBJECT_ARRAY_TYPE
172 #undef LIBBDIOBJECT_ARRAY_CLASS_NAME
173 
float m_force
Definition: DtFxForce.h:131
class that allows clients to add global forces (no export of virtual base class)
Definition: DtFxForceInterface.h:19
DtFxForce * m_source_force
Definition: DtFxForce.h:137
Definition: bdiQPropTree_subclasses.h:306
virtual const bdiVec3f & forceDirection() const
Definition: DtFxForce.h:86
virtual float forceStrength() const
Definition: DtFxForce.h:82
DtFxParticleSystemManager is the manager for all the particle systems and descriptions diguy sdk comm...
Definition: DtFxParticleSystemManager.h:47
virtual bool globalForce() const
Definition: DtFxForce.h:90
a cpu side particle representation
Definition: DtFxParticleSystem.h:329
virtual ForceType forceType() const
Definition: DtFxForce.h:74
virtual FalloffType falloffType() const
Definition: DtFxForce.h:78
virtual void setFalloffType(FalloffType falloffType)
sets the falloff type
Definition: DtFxForce.h:77
#define DT_DLL_VRVFX
Definition: vrvFx.h:20
virtual void setParticleManager(DtFxParticleSystemManager *manager)
sets the manager
Definition: DtFxForce.h:53
DtFxScriptData myForceScriptData
Definition: DtFxForce.h:144
Contains script class.
DtFxParticleSystemManager * m_particle_manager
Definition: DtFxForce.h:138
Contains DLL export macros.
virtual DtFxForce * sourceForce() const
Definition: DtFxForce.h:66
virtual ~DtFxForce()
DTOR.
Definition: DtFxForce.h:45
ForceType m_force_type
Definition: DtFxForce.h:134
const bdiString & forceScript() const
gets the force script
Definition: DtFxForce.h:108
wrapper around a parsed expression.
Definition: DtFxScriptData.h:17
bdiMat4f myGeocentricMat
Definition: DtFxForce.h:140
virtual void setSourceForce(DtFxForce *force)
sets the desc force that this cloned from
Definition: DtFxForce.h:65
FalloffType m_falloff_type
Definition: DtFxForce.h:135
bdiVec3f m_direction
Definition: DtFxForce.h:133
const bdiFarPosition & position() const
gets the position
Definition: DtFxForce.h:60
virtual void setForceStrength(float str)
sets the force strength
Definition: DtFxForce.h:81
bdiFarPosition m_position
Definition: DtFxForce.h:129
const bdiMat4f & geocentricMat() const
Definition: DtFxForce.h:121
DtParticleSystem is implementation of the particle system, vrvOsg communicates with it via DtParticle...
Definition: DtFxParticleSystem.h:397
ForceType
Definition: DtFxForceInterface.h:22
virtual void setSourceSystem(DtFxParticleSystem *system)
sets the system that created this force
Definition: DtFxForce.h:62
bdiMat4f myGeocentricMatInv
Definition: DtFxForce.h:141
virtual void setRadius(float radius)
sets the volume of the force, only used for None falloff type, other ones will be derived base on fal...
Definition: DtFxForce.h:69
virtual void setPosition(const bdiFarPosition &pos)
Definition: DtFxForce.h:57
forces to include that influence the particles movement /ingroup vrvFx
Definition: DtFxForce.h:35
bdiFarPosition m_last_geoc_position
Definition: DtFxForce.h:130
virtual void setForceDirection(float x, float y, float z)
currently only used for wind
Definition: DtFxForce.h:85
bdiString myForceScript
Definition: DtFxForce.h:143
const bdiMat4f & geocentricMatInv() const
Definition: DtFxForce.h:122
virtual void setForceType(ForceType forceType)
sets the type of force
Definition: DtFxForce.h:73
virtual void setGlobalForce(bool global)
is this a global force
Definition: DtFxForce.h:89
FalloffType
Definition: DtFxForceInterface.h:34
bool m_global_force
Definition: DtFxForce.h:128
float m_radius
Definition: DtFxForce.h:132
DtFxParticleSystem * m_source_system
Definition: DtFxForce.h:136
static osgEarth::Util::SimplexNoise theNoise
Definition: DtFxForce.h:146
virtual float radius() const
Definition: DtFxForce.h:70

Document ID: Generated on Thu Jun 1 17:58:13 EDT 2023 from SVN revision 255404
Copyright © 2005-2021 MAK Technologies. All Rights Reserved (www.mak.com)