From 1e6aa4b40fcd9abeed6c3c28843bb58e07afc49d Mon Sep 17 00:00:00 2001 From: fredb Date: Sun, 14 Mar 2010 09:24:12 +0000 Subject: [PATCH] Precipitation inside cockpit temporary fix. Needs a clip distance settable to take account of views and different cockpit size. --- simgear/environment/precipitation.cxx | 18 ++++++++++++++++-- simgear/environment/precipitation.hxx | 1 + 2 files changed, 17 insertions(+), 2 deletions(-) diff --git a/simgear/environment/precipitation.cxx b/simgear/environment/precipitation.cxx index 05b1b447..075fac1d 100644 --- a/simgear/environment/precipitation.cxx +++ b/simgear/environment/precipitation.cxx @@ -28,6 +28,7 @@ #include "visual_enviro.hxx" #include +#include /** * @brief SGPrecipitation constructor @@ -35,7 +36,7 @@ * Build a new OSG object from osgParticle. */ SGPrecipitation::SGPrecipitation() : - _freeze(false), _snow_intensity(0.0), _rain_intensity(0.0) + _freeze(false), _snow_intensity(0.0), _rain_intensity(0.0), _clip_distance(5.0) { _precipitationEffect = new osgParticle::PrecipitationEffect; } @@ -54,7 +55,20 @@ osg::Group* SGPrecipitation::build(void) _precipitationEffect->snow(0); _precipitationEffect->rain(0); - group->addChild(_precipitationEffect.get()); + if (_clip_distance!=0.0) + { + osg::ref_ptr clipNode = new osg::ClipNode; + clipNode->addClipPlane( new osg::ClipPlane( 0 ) ); + clipNode->getClipPlane(0)->setClipPlane( 0.0, 0.0, -1.0, -_clip_distance ); + clipNode->setReferenceFrame(osg::ClipNode::ABSOLUTE_RF); + clipNode->addChild(_precipitationEffect.get()); + + group->addChild(clipNode.get()); + } + else + { + group->addChild(_precipitationEffect.get()); + } return group; } diff --git a/simgear/environment/precipitation.hxx b/simgear/environment/precipitation.hxx index 80a08aea..bcf568c6 100644 --- a/simgear/environment/precipitation.hxx +++ b/simgear/environment/precipitation.hxx @@ -39,6 +39,7 @@ private: float _snow_intensity; float _rain_intensity; + float _clip_distance; int _wind_dir; osg::Vec3 _wind_vec; -- 2.39.5