void DeferredLight::rebuildGeometry(float radius) { //Disable all 3 bits DISABLE_BIT(mPermutation, LightMaterialGenerator::MI_POINT); DISABLE_BIT(mPermutation, LightMaterialGenerator::MI_SPOTLIGHT); DISABLE_BIT(mPermutation, LightMaterialGenerator::MI_DIRECTIONAL); switch (mParentLight->getType()) { case Ogre::Light::LT_DIRECTIONAL: createRectangle2D(); ENABLE_BIT(mPermutation,LightMaterialGenerator::MI_DIRECTIONAL); break; case Ogre::Light::LT_POINT: /// XXX some more intelligent expression for rings and segments createSphere(radius, 10, 10); ENABLE_BIT(mPermutation,LightMaterialGenerator::MI_POINT); break; case Ogre::Light::LT_SPOTLIGHT: Ogre::Real height = mParentLight->getAttenuationRange(); Ogre::Radian coneRadiusAngle = mParentLight->getSpotlightOuterAngle() / 2; Ogre::Real rad = Ogre::Math::Tan(coneRadiusAngle) * height; createCone(rad, height, 20); ENABLE_BIT(mPermutation,LightMaterialGenerator::MI_SPOTLIGHT); break; } }
void DeferredLight::rebuildGeometry(Ogre::Real radius) { DISABLE_BIT(permutation, LightMaterialGenerator::MI_POINT); DISABLE_BIT(permutation, LightMaterialGenerator::MI_SPOTLIGHT); DISABLE_BIT(permutation, LightMaterialGenerator::MI_DIRECTIONAL); switch (parentLight->getType()) { case Ogre::Light::LT_DIRECTIONAL: createRectangle2D(); ENABLE_BIT(permutation,LightMaterialGenerator::MI_DIRECTIONAL); break; case Ogre::Light::LT_POINT: createSphere(radius, 10, 10); ENABLE_BIT(permutation,LightMaterialGenerator::MI_POINT); break; case Ogre::Light::LT_SPOTLIGHT: Ogre::Real height = parentLight->getAttenuationRange(); Ogre::Radian coneRadiusAngle = parentLight->getSpotlightOuterAngle() / 2; Ogre::Real rad = Ogre::Math::Tan(coneRadiusAngle) * height; createCone(rad, height, 20); ENABLE_BIT(permutation,LightMaterialGenerator::MI_SPOTLIGHT); break; } }