void COgreManager::ApplyShadowParams() { EnableShadow(m_effectCfg.bShadow); m_pSceneMgr->setShadowFarDistance(Ogre::StringConverter::parseReal(m_shadowParams["FarDistance"])); m_pSceneMgr->setShadowTextureCountPerLightType(Ogre::Light::LT_DIRECTIONAL, 3); m_pSceneMgr->setShadowDirectionalLightExtrusionDistance(Ogre::StringConverter::parseReal(m_shadowParams["LightExtrusionDistance"])); m_pSceneMgr->setShadowTextureCount(3); FLOAT3 texSize = Ogre::StringConverter::parseVector3(m_shadowParams["ShadowMapSize"]); m_pSceneMgr->setShadowTextureConfig(0, texSize.x, texSize.x, PF_FLOAT32_R); m_pSceneMgr->setShadowTextureConfig(1, texSize.y, texSize.y, PF_FLOAT32_R); m_pSceneMgr->setShadowTextureConfig(2, texSize.z, texSize.z, PF_FLOAT32_R); m_pSceneMgr->setShadowTextureSelfShadow(Ogre::StringConverter::parseBool(m_shadowParams["SelfShadow"])); m_pSceneMgr->setShadowCasterRenderBackFaces(Ogre::StringConverter::parseBool(m_shadowParams["RenderBackFace"])); m_pSceneMgr->setShadowTextureCasterMaterial("Ogre/shadow/depth/caster"); PSSMShadowCameraSetup* cam = GetShadowCameraSetup(); cam->setSplitPadding(Ogre::StringConverter::parseBool(m_shadowParams["SplitPadding"])); cam->calculateSplitPoints(3, m_pMainCamera->getNearClipDistance(), m_pSceneMgr->getShadowFarDistance(), Ogre::StringConverter::parseReal(m_shadowParams["PssmLambda"])); FLOAT3 adjust = Ogre::StringConverter::parseVector3(m_shadowParams["AdjustFactor"]); cam->setOptimalAdjustFactor(0, adjust.x); cam->setOptimalAdjustFactor(1, adjust.y); cam->setOptimalAdjustFactor(2, adjust.z); cam->setUseSimpleOptimalAdjust(Ogre::StringConverter::parseBool(m_shadowParams["UseSimpleAdjust"])); cam->setCameraLightDirectionThreshold(Degree(Ogre::StringConverter::parseReal(m_shadowParams["CameraLightDirectionThreshold"]))); }