diff --git a/src/modules/graphic/osggraph/OsgCar.cpp b/src/modules/graphic/osggraph/OsgCar.cpp index 5257e8eb3..92395efd2 100644 --- a/src/modules/graphic/osggraph/OsgCar.cpp +++ b/src/modules/graphic/osggraph/OsgCar.cpp @@ -307,7 +307,8 @@ SDCar::loadCar(tCarElt *car) this->car_root = new osg::Group; car_root->addChild(car_branch); - this->car_root->addChild(this->initOcclusionQuad(car)); + if (SHADOW_TECHNIQUE == 0) + this->car_root->addChild(this->initOcclusionQuad(car)); return this->car_root; } @@ -422,18 +423,18 @@ void SDCar::updateCar() //ugly computation, - osg::ref_ptr vertices = new osg::Vec3Array; - for(uint i=0;isize();i++) + if (SHADOW_TECHNIQUE == 0) { - osg::Vec3 vtx = (*shadowVertices.get())[i]; - osg::Vec4 vtx_world = osg::Vec4(vtx,1.0f)*mat; - vtx_world._v[2] = RtTrackHeightG(car->_trkPos.seg, vtx_world.x(), vtx_world.y()); //0.01 needed, we have to sort out why - vertices->push_back(osg::Vec3(vtx_world.x(), vtx_world.y(), vtx_world.z())); - + osg::ref_ptr vertices = new osg::Vec3Array; + for(uint i=0;isize();i++) + { + osg::Vec3 vtx = (*shadowVertices.get())[i]; + osg::Vec4 vtx_world = osg::Vec4(vtx,1.0f)*mat; + vtx_world._v[2] = RtTrackHeightG(car->_trkPos.seg, vtx_world.x(), vtx_world.y()); //0.01 needed, we have to sort out why + vertices->push_back(osg::Vec3(vtx_world.x(), vtx_world.y(), vtx_world.z())); + } + quad->setVertexArray(vertices); } - quad->setVertexArray(vertices); - - } void SDCar::updateShadingParameters(osg::Matrixf modelview){ diff --git a/src/modules/graphic/osggraph/OsgRender.cpp b/src/modules/graphic/osggraph/OsgRender.cpp index 5308f2be8..8e207030d 100644 --- a/src/modules/graphic/osggraph/OsgRender.cpp +++ b/src/modules/graphic/osggraph/OsgRender.cpp @@ -30,7 +30,14 @@ #include #include #include -//#include +#include +#include +#include +#include +#include +#include +#include +#include #include #include "OsgMain.h" @@ -433,21 +440,27 @@ void SDRender::Init(tTrack *track) void SDRender::ShadowedScene() { - /*osg::ref_ptr vdsm = new osgShadow::ShadowMap; - vdsm->setLight(sunLight.get()); - vdsm->setTextureSize(osg::Vec2s(2048, 2048)); - vdsm->setTextureUnit(3); - //shadowRoot = new osgShadow::ShadowedScene; + if (SHADOW_TECHNIQUE == 1) + { + osg::ref_ptr vdsm = new osgShadow::ShadowMap; + vdsm->setLight(sunLight.get()); + vdsm->setTextureSize(osg::Vec2s(4096, 4096)); + vdsm->setTextureUnit(1); + shadowRoot = new osgShadow::ShadowedScene; + osgShadow::ShadowSettings* settings = shadowRoot->getShadowSettings(); + settings->setReceivesShadowTraversalMask(rcvShadowMask); + settings->setCastsShadowTraversalMask(castShadowMask); + shadowRoot->setShadowTechnique((vdsm.get())); + } - shadowRoot->setShadowTechnique((vdsm.get())); - shadowRoot->setReceivesShadowTraversalMask(rcvShadowMask); - shadowRoot->setCastsShadowTraversalMask(castShadowMask); shadowRoot->addChild(m_scene.get()); shadowRoot->addChild(m_CarRoot.get()); shadowRoot->addChild(sunLight.get()); + shadowRoot->addChild(thesky->getCloudRoot()); + m_RealRoot->removeChild(0, m_RealRoot->getNumChildren()); - m_RealRoot->addChild(shadowRoot.get());*/ + m_RealRoot->addChild(shadowRoot.get()); } void SDRender::addCars(osg::Node* cars) @@ -460,7 +473,8 @@ void SDRender::addCars(osg::Node* cars) optimizer.optimize(m_CarRoot.get()); optimizer.optimize(m_scene.get()); - //ShadowedScene(); + if (SHADOW_TECHNIQUE > 0) + ShadowedScene(); } void SDRender::UpdateLight( void ) diff --git a/src/modules/graphic/osggraph/OsgRender.h b/src/modules/graphic/osggraph/OsgRender.h index d49c52f37..70c58efa4 100644 --- a/src/modules/graphic/osggraph/OsgRender.h +++ b/src/modules/graphic/osggraph/OsgRender.h @@ -26,6 +26,8 @@ #include //tTrack #include // tSituation +#define SHADOW_TECHNIQUE 0 + class SDSky; class SDScenery;