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:
parent
c83c539fbd
commit
37e832cad5
3 changed files with 39 additions and 22 deletions
|
@ -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){
|
||||
|
|
|
@ -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 )
|
||||
|
|
|
@ -26,6 +26,8 @@
|
|||
#include <track.h> //tTrack
|
||||
#include <raceman.h> // tSituation
|
||||
|
||||
#define SHADOW_TECHNIQUE 0
|
||||
|
||||
class SDSky;
|
||||
class SDScenery;
|
||||
|
||||
|
|
Loading…
Reference in a new issue