20 #include <osg/BlendFunc>
21 #include <osg/RenderInfo>
29 class DtWeatherEffectDrawable;
30 class DtWeatherEffectsObject;
52 , myWeatherEffectsObject(0)
55 , myIsGeoCentric(false)
57 , myParametersUnfmLoc(0)
58 , mySoftnessUnfmLoc(0)
59 , myDepthProxyUnfmLoc(0)
61 , mySurfaceProjUnfmLoc(0)
62 , myAdditiveBlend(false)
64 , myAppliedHeightMap(false)
67 , mySurfaceHeightCount(0)
70 , mySurfaceCornerRadius(1)
71 , mySurfaceAltitude(0)
73 , myElevationRange(100000.0f)
112 EffectTypePrecipitation = 0,
125 SurfaceHitTypeNone = 0,
158 virtual void init(
int particleCount,
float particleSize,
float radius, EffectType type,
unsigned int randomSeed);
161 virtual void releaseGLObjects(osg::State* state)
const;
167 virtual void simulationUpdate(
float timeStep,
double currentTime,
DtJobSplitter* jobSplitter);
172 virtual void postSimulationUpdate(
float timeStep,
double currentTime);
183 virtual void cullUpdate(
const osg::Vec3d& camPos,
const osg::Matrixd& basis,
DtJobSplitter* jobSplitter);
190 virtual void setSurfaceHitType(SurfaceHitType type);
194 virtual void setSurfaceHitOffset(
float offset);
198 virtual void setSurfaceHitMaxSlope(
float degrees);
206 virtual void setWindBlownParameters(
int spawnCount,
float minSpeed,
float maxSpeed,
float minTime,
float maxTime);
211 virtual void setWind(
float windDirectionRad,
float windSpeedMps);
215 virtual void setWindSpeedMultiplier(
float multiplier);
219 virtual void setWindLiftMultiplier(
float multiplier);
223 virtual void setWindTurbulence(
float multiplier);
228 virtual void setWindVariation(
float minWind,
float maxWind);
237 virtual void setScaleAnimation(
float minX,
float maxX,
float minY,
float maxY,
float time);
243 virtual void setStreak(
float multiplier);
249 virtual void setCameraStreakEnable(
bool enable);
256 virtual void setStreakAdjustmentEnable(
bool enable);
259 virtual void setOrientFlat(
bool enable);
263 virtual void setIntensity(
float intensity);
272 virtual void setFadePerIntensity(
float fadeMin,
float fadeMax,
float intensityMin,
float intensityMax);
281 virtual void setFadePerWind(
float fadeMin,
float fadeMax,
float windMin,
float windMax);
290 virtual void setTextureCoordAnimationPerWind(
float multMin,
float multMax,
float windMin,
float windMax);
299 virtual void setParticlesPerIntensity(
float percentMin,
float percentMax,
float intensityMin,
float intensityMax);
303 virtual void setBaseColor(
const osg::Vec3& color);
307 virtual void setAdditiveBlend(
bool enable);
310 virtual bool additiveBlend()
const;
314 virtual void setVelocity(
float x,
float y,
float z);
318 virtual void setInitRotationVariation(
float rotationDeg);
322 virtual void setRotationVelocity(
float velDeg);
325 virtual float radius()
const;
332 virtual void setTextureAtlasCell(
unsigned char numColumns,
unsigned char numRows,
unsigned char col,
unsigned char row);
339 virtual void setTextureCoordinateAnimation(
float dirSpeedU,
float dirSpeedV,
float scale0,
float scale1);
345 virtual void setTexturePatternChannelMix(
float mix0,
float mix1);
349 virtual void setDepthSoftness(
float softness);
352 virtual float depthSoftness()
const;
358 virtual void setDepthProximity(
float startFade,
float fadeEnd,
float mix);
362 virtual void setDragCoefficient(
float coefficient);
365 virtual float dragCoefficient()
const;
369 virtual void setSortEnable(
bool enable);
372 virtual bool sortEnable()
const;
376 virtual void runSort(
const osg::Vec3& localCamPos);
380 virtual void setClampToSurface(
bool enable);
383 virtual bool clampToSurface()
const;
387 virtual void setGravity(
const osg::Vec3& gravity);
394 virtual void setRadiusFading(
float fadeInStart,
float fadeInEnd,
float fadeOutStart,
float fadeOutEnd);
402 : myVboPositionArray(0)
404 , myVboTexCoords0Array(0)
406 myPoints =
new osg::Vec4Array;
407 myMove =
new osg::Vec4Array;
408 myTexCoords0 =
new osg::Vec2Array;
427 , myPosition(0, 0, 0, 0)
429 , myVelocity(0, 0, 0)
431 , myLifeTimeInit(1.0f)
474 virtual void runSimulationUpdateJob(
float timeStep,
double currentTime);
478 virtual void updateHailSurfaceHit(
float timeStep);
482 virtual void updateWindBlownSurfaceHit(
float timeStep);
486 virtual void computeSortDepth(
const osg::Vec3& reference);
489 virtual void fillSortedParticles();
494 virtual bool bindMeshGroupData(
MeshGroup* meshGroup, osg::RenderInfo& renderInfo)
const;
499 virtual bool bindDynamicMeshGroupData(
MeshGroup* meshGroup, osg::RenderInfo& renderInfo)
const;
505 virtual bool bindVaoToMeshGroup(
GLuint vao,
MeshGroup* meshGroup, osg::RenderInfo& renderInfo)
const;
510 virtual void simulatePrecipitationParticles(
float timeStep,
double currentTime);
516 virtual void simulateParticles(
float timeStep,
double currentTime, osg::Vec3d& basisPosChange);
524 void wrapPosition(
float& posX,
float& posY,
float& posZ);
533 void freeParticle(
Particle* particle);
539 void spawnHailParticle(
const osg::Vec3d& position,
const osg::Vec3& normal,
540 const unsigned char usePhysics);
547 void spawnWindBlownParticle(
const osg::Vec3d& position,
548 const osg::Vec3& normal,
float windRandom,
float cosAng);
553 const osg::Vec3 crossProduct(
const osg::Vec3& v0,
const osg::Vec3& v1);
558 float computeRandomMinMax(
float fMin,
float fMax);
563 void computeRandomPointInRadius(osg::Vec2& point,
float radius);
570 bool clampPosition(osg::Vec3d& position, osg::Vec3& normal,
const osg::Vec3& up);
575 virtual float computeBlendControl(
const BlendData& data,
float blendPos)
const;
580 static void theSimulationUpdateJob(
void* data);
583 static int theSortBackToFront(
const void* arg0,
const void* arg1);
586 static void theSortJob(
void* data);
611 , myCameraPos(0, 0, 0)
747 virtual DtWeatherEffect* create(
int particleCount,
float particleSize,
float radius,
755 static const std::string& theClassName();
float myTexCoordAnimScale1
Definition: DtWeatherEffect.h:672
float myLifeTimeInit
Definition: DtWeatherEffect.h:445
osg::ref_ptr< osg::BlendFunc > myBlendFunc
Definition: DtWeatherEffect.h:655
DT_DLL_EXAMPLESCENEROOTPLUGIN void init(DtDe &anIG)
float myWindLiftMultiplier
Definition: DtWeatherEffect.h:638
float mySurfaceBoundsX
Definition: DtWeatherEffect.h:96
osg::Vec3d myBasisPos
Definition: DtWeatherEffect.h:623
A structure used to define a mesh group (voa, positions, coords).
Definition: DtWeatherEffect.h:399
float mySurfaceHitMaxSlope
Definition: DtWeatherEffect.h:630
float myWindMax
Definition: DtWeatherEffect.h:641
BlendData myFadeByIntensity
Definition: DtWeatherEffect.h:648
float myBlendMax
Definition: DtWeatherEffect.h:468
float myBlendMin
Definition: DtWeatherEffect.h:467
Virtual base class.
Definition: DtVirtualBaseClass.h:19
bool myAdditiveBlend
Definition: DtWeatherEffect.h:89
osg::Vec3 myGravity
Definition: DtWeatherEffect.h:685
float mySurfaceAltitude
Definition: DtWeatherEffect.h:99
Particle ** myRenderList
Definition: DtWeatherEffect.h:707
Implementation independent random number generator.
Definition: DtRandomNumberGenerator.h:20
osg::Vec3 myCameraPos
Definition: DtWeatherEffect.h:617
float myTexCoordAnimDirOffsetU
Definition: DtWeatherEffect.h:673
GLint mySurfaceProjUnfmLoc
Definition: DtWeatherEffect.h:88
GLint mySurfaceUnfmLoc
Definition: DtWeatherEffect.h:87
osg::Vec3d myCamMove
Definition: DtWeatherEffect.h:81
float myTexturePatternMix1
Definition: DtWeatherEffect.h:676
float myTexCoordAnimDirOffsetV
Definition: DtWeatherEffect.h:674
bool myOrientFlat
Definition: DtWeatherEffect.h:684
#define DT_DLL_VRVOSG
Definition: vrvOsg.h:23
Definition: DtWeatherEffect.h:127
bool myBasisDirty
Definition: DtWeatherEffect.h:625
SimulationUpdateJobData()
Definition: DtWeatherEffect.h:593
unsigned int myVboTexCoords0Array
Definition: DtWeatherEffect.h:417
Definition: DtWeatherEffect.h:126
bool mySortEnable
Definition: DtWeatherEffect.h:682
SortJobData()
Definition: DtWeatherEffect.h:609
A structure to hold data for a sorting job.
Definition: DtWeatherEffect.h:607
osg::ref_ptr< osg::Vec4Array > myMove
Definition: DtWeatherEffect.h:412
unsigned int GLuint
Definition: DtGlTextureBufferObject.h:17
DrawData()
Definition: DtWeatherEffect.h:50
int mySurfaceHeightCount
Definition: DtWeatherEffect.h:95
float myWindBlownMinTime
Definition: DtWeatherEffect.h:694
float myTimeStep
Definition: DtWeatherEffect.h:602
this class is used to split work up between threads.
Definition: DtJobSplitter.h:64
float myRadiusFadeInFalloff
Definition: DtWeatherEffect.h:687
float myDepthProximityStart
Definition: DtWeatherEffect.h:679
Particle()
Definition: DtWeatherEffect.h:423
osg::Vec3d myCamPos
Definition: DtWeatherEffect.h:80
bool myAppliedHeightMap
Definition: DtWeatherEffect.h:91
bool myCameraStreak
Definition: DtWeatherEffect.h:659
SurfaceHitType mySurfaceHitType
Definition: DtWeatherEffect.h:628
GLint myParametersUnfmLoc
Definition: DtWeatherEffect.h:84
bool myIsGeoCentric
Definition: DtWeatherEffect.h:82
DtWeatherEffect * myEffect
Definition: DtWeatherEffect.h:616
unsigned int myVboMoveArray
Definition: DtWeatherEffect.h:416
float myTextureAtlasRow
Definition: DtWeatherEffect.h:668
BlendData myParticlesByIntensity
Definition: DtWeatherEffect.h:651
osg::Vec3 myVelocity
Definition: DtWeatherEffect.h:443
float myTextureAtlasRows
Definition: DtWeatherEffect.h:666
unsigned char myUsePhysics
Definition: DtWeatherEffect.h:446
bool myAdditiveBlend
Definition: DtWeatherEffect.h:654
float mySurfaceHitOffset
Definition: DtWeatherEffect.h:629
float myScaleAnimMaxX
Definition: DtWeatherEffect.h:661
float myTextureAtlasCols
Definition: DtWeatherEffect.h:665
DtRandomNumberGenerator myRandomNumberGen
Definition: DtWeatherEffect.h:716
unsigned int myRandomSeed
Definition: DtWeatherEffect.h:632
float myWindBlownMaxSpeed
Definition: DtWeatherEffect.h:693
float myTexturePatternMix0
Definition: DtWeatherEffect.h:675
creator for DtWeatherEffect
Definition: DtWeatherEffect.h:721
A structure used to hold data for drawing.
Definition: DtWeatherEffect.h:48
osg::Vec3d myLastBasisPos
Definition: DtWeatherEffect.h:624
osg::Matrixf mySurfaceMatrix
Definition: DtWeatherEffect.h:100
float myWindBlownMinSpeed
Definition: DtWeatherEffect.h:692
float myElevationRange
Definition: DtWeatherEffect.h:102
float myInitRotationRad
Definition: DtWeatherEffect.h:644
Contains makVrv::DtVirtualBaseClass class.
A drawable for drawing weather effects such as hail.
Definition: DtWeatherEffectDrawable.h:36
Contains makVrv::DtRandomNumberGenerator class.
BlendData()
Definition: DtWeatherEffect.h:456
bool myStateDirty
Definition: DtWeatherEffect.h:90
osg::ref_ptr< osg::Vec4Array > myPoints
Definition: DtWeatherEffect.h:411
float myIntensity
Definition: DtWeatherEffect.h:647
float myTexCoordAnimDirSpeedV
Definition: DtWeatherEffect.h:670
osg::Vec3 myScroll
Definition: DtWeatherEffect.h:633
int myRenderParticleCount
Definition: DtWeatherEffect.h:708
SortJobData mySortJobData
Definition: DtWeatherEffect.h:713
Contains makVrv::DtJobSplitter class.
float myWindSpeedMultiplier
Definition: DtWeatherEffect.h:637
float myValueMax
Definition: DtWeatherEffect.h:466
DtJobSplitterJob mySimulationUpdateJob
Definition: DtWeatherEffect.h:711
float myNearClip
Definition: DtWeatherEffect.h:83
this class is used to create weather effects around the eye to represent effects such as mist...
Definition: DtWeatherEffect.h:43
float myWindTurbulence
Definition: DtWeatherEffect.h:639
float myScaleAnimMaxY
Definition: DtWeatherEffect.h:663
float mySurfaceHitTimer
Definition: DtWeatherEffect.h:631
int myParticleActiveCount
Definition: DtWeatherEffect.h:705
EffectType
An enumeration to define the effect type.
Definition: DtWeatherEffect.h:110
float mySortDepth
Definition: DtWeatherEffect.h:440
const unsigned int * mySurfaceHeights
Definition: DtWeatherEffect.h:94
A structure to hold blending control data for things like particle amount per intensity.
Definition: DtWeatherEffect.h:454
float mySurfaceBoundsY
Definition: DtWeatherEffect.h:97
float myDepthProximityRange
Definition: DtWeatherEffect.h:680
float myDepthSoftness
Definition: DtWeatherEffect.h:677
float myRotationVelocity
Definition: DtWeatherEffect.h:645
int myWindBlownSpawnCount
Definition: DtWeatherEffect.h:691
float myDragCoefficient
Definition: DtWeatherEffect.h:642
osg::Vec3 myVelocity
Definition: DtWeatherEffect.h:643
float myWindDirectionRad
Definition: DtWeatherEffect.h:635
A structure used to define a simulation particle.
Definition: DtWeatherEffect.h:421
osg::ref_ptr< osg::Vec2Array > myTexCoords0
Definition: DtWeatherEffect.h:413
float myTextureAtlasCol
Definition: DtWeatherEffect.h:667
osg::Vec3 myBaseColor
Definition: DtWeatherEffect.h:653
float myEffectFade
Definition: DtWeatherEffect.h:646
Particle * myParent
Definition: DtWeatherEffect.h:438
float myRadiusFadeOutStart
Definition: DtWeatherEffect.h:688
double myCurrentTime
Definition: DtWeatherEffect.h:603
BlendData myTexCoordAnimSpeedByWind
Definition: DtWeatherEffect.h:650
GLint myDepthProxyUnfmLoc
Definition: DtWeatherEffect.h:86
DtGlVaoManager * myVaoManager
Definition: DtWeatherEffect.h:698
bool myClampToSurface
Definition: DtWeatherEffect.h:683
GLint mySoftnessUnfmLoc
Definition: DtWeatherEffect.h:85
Particle * myParticlesActive
Definition: DtWeatherEffect.h:704
osg::Vec4 myMove
Definition: DtWeatherEffect.h:442
DtDe & myDe
Definition: DtWeatherEffect.h:758
float myScaleSpeed
Definition: DtWeatherEffect.h:664
float myRadiusFadeOutFalloff
Definition: DtWeatherEffect.h:689
float myWindMin
Definition: DtWeatherEffect.h:640
osg::RenderInfo * myRenderInfo
Definition: DtWeatherEffect.h:78
float myWindSpeedMps
Definition: DtWeatherEffect.h:636
A structure to hold data for a simluation update job.
Definition: DtWeatherEffect.h:591
SimulationUpdateJobData mySimulationUpdateJobData
Definition: DtWeatherEffect.h:710
A generic structure to hold data for a job for use with DtJobSplitter.
Definition: DtJobSplitter.h:26
MeshGroup * myMeshGroup
Definition: DtWeatherEffect.h:697
float myScaleAnimMinX
Definition: DtWeatherEffect.h:660
float myStreakAdjustment
Definition: DtWeatherEffect.h:657
float mySurfaceCornerRadius
Definition: DtWeatherEffect.h:98
DtDe & myDe
Definition: DtWeatherEffect.h:620
float myDepthProximityMix
Definition: DtWeatherEffect.h:678
bool myStreakAdjustmentEnable
Definition: DtWeatherEffect.h:658
This class is used to manage an opengl vertex array object (VAO) dealing with multiple opengl context...
Definition: DtGlVaoManager.h:49
float myTexCoordAnimDirSpeedU
Definition: DtWeatherEffect.h:669
float myLifeTime
Definition: DtWeatherEffect.h:444
float myDepthProximityInvRange
Definition: DtWeatherEffect.h:681
float myTexCoordAnimScale0
Definition: DtWeatherEffect.h:671
float myRadius
Definition: DtWeatherEffect.h:634
Contains DLL export macros.
unsigned int myVboPositionArray
Definition: DtWeatherEffect.h:415
EffectType myEffectType
Definition: DtWeatherEffect.h:627
Particle * myParticlesMemoryPool
Definition: DtWeatherEffect.h:700
float myScaleAnimMinY
Definition: DtWeatherEffect.h:662
The DtDe is the core component of any VR-Vantage application.
Definition: DtDe.h:69
osg::Vec4 myPosition
Definition: DtWeatherEffect.h:441
float myRadiusFadeInStart
Definition: DtWeatherEffect.h:686
float myParticleSize
Definition: DtWeatherEffect.h:652
SurfaceHitType
An enumeration to define a surface hit effect.
Definition: DtWeatherEffect.h:123
float myValueMin
Definition: DtWeatherEffect.h:465
voidpf uLong offset
Definition: ioapi.h:42
BlendData myFadeByWind
Definition: DtWeatherEffect.h:649
Contains the DtGlVaoManager class declaration.
DtJobSplitterJob mySortJob
Definition: DtWeatherEffect.h:714
DtWeatherEffectsObject * myWeatherEffectsObject
Definition: DtWeatherEffect.h:79
float myElevationMin
Definition: DtWeatherEffect.h:101
unsigned char myFadeCurve
Definition: DtWeatherEffect.h:447
DtWeatherEffect * myEffect
Definition: DtWeatherEffect.h:601
int myParticleMemoryPoolCount
Definition: DtWeatherEffect.h:701
float myWindBlownMaxTime
Definition: DtWeatherEffect.h:695
std::vector< DtWeatherArea * > myWeatherAreas
Definition: DtWeatherEffect.h:93
MeshGroup()
Definition: DtWeatherEffect.h:401
const DtWeatherEffectDrawable * myDrawable
Definition: DtWeatherEffect.h:92
Particle * myParticlesFree
Definition: DtWeatherEffect.h:703
float myStreak
Definition: DtWeatherEffect.h:656
The weather effects object for passing settings from the master to the slave for weather effects...
Definition: DtWeatherEffectsObject.h:27
osg::Matrixd myBasisRot
Definition: DtWeatherEffect.h:622
Particle * myChild
Definition: DtWeatherEffect.h:439