added first work on dynamic Shadow on Cars

git-svn-id: https://svn.code.sf.net/p/speed-dreams/code/trunk@5472 30fe4595-0a0c-4342-8851-515496e4dcbd

Former-commit-id: 4a05b90540e665f1226f039e6dc1a6f9653af414
Former-commit-id: 36a9f7a3a69e7c6caf6f1c8a0af9d3fdfbad07a5
This commit is contained in:
torcs-ng 2013-05-25 16:47:16 +00:00
parent c83c539fbd
commit 37e832cad5
3 changed files with 39 additions and 22 deletions

View file

@ -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<osg::Vec3Array> vertices = new osg::Vec3Array;
for(uint i=0;i<shadowVertices->size();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<osg::Vec3Array> vertices = new osg::Vec3Array;
for(uint i=0;i<shadowVertices->size();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){

View file

@ -30,7 +30,14 @@
#include <osgViewer/Viewer>
#include <osgParticle/PrecipitationEffect>
#include <osgShadow/ShadowedScene>
//#include <osgShadow/ViewDependentShadowMap>
#include <osgShadow/ShadowVolume>
#include <osgShadow/ShadowTexture>
#include <osgShadow/ShadowMap>
#include <osgShadow/SoftShadowMap>
#include <osgShadow/ParallelSplitShadowMap>
#include <osgShadow/LightSpacePerspectiveShadowMap>
#include <osgShadow/StandardShadowMap>
#include <osgShadow/ViewDependentShadowMap>
#include <osgShadow/ShadowMap>
#include "OsgMain.h"
@ -433,21 +440,27 @@ void SDRender::Init(tTrack *track)
void SDRender::ShadowedScene()
{
/*osg::ref_ptr<osgShadow::ShadowMap> 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<osgShadow::ShadowMap> 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 )

View file

@ -26,6 +26,8 @@
#include <track.h> //tTrack
#include <raceman.h> // tSituation
#define SHADOW_TECHNIQUE 0
class SDSky;
class SDScenery;