From 37e832cad5b81847a952136cf9c87ef55838b2a0 Mon Sep 17 00:00:00 2001 From: torcs-ng Date: Sat, 25 May 2013 16:47:16 +0000 Subject: [PATCH] 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 --- src/modules/graphic/osggraph/OsgCar.cpp | 23 +++++++------- src/modules/graphic/osggraph/OsgRender.cpp | 36 +++++++++++++++------- src/modules/graphic/osggraph/OsgRender.h | 2 ++ 3 files changed, 39 insertions(+), 22 deletions(-) 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;