void VShadowMapGenSpotDir::GetBoundingBoxVS(hkvAlignedBBox &boundingBox) const { VASSERT(m_eProjectionType==SHADOW_PROJECTION_ORTHOGRAPHIC && m_iNumParts>0); if (!boundingBox.isValid()) return; // transform shadow-caster bounding box with view-matrix of first cascade, since actual cascade is indifferent here boundingBox.transformFromOrigin(m_pParts[0].GetCamera()->GetWorldToCameraTransformation()); }
static void LookAtBox(const hkvAlignedBBox &bbox) { if (!bbox.isValid()) return; VisBaseEntity_cl* pCenterEntity = Vision::Game.CreateEntity("VisBaseEntity_cl", bbox.getCenter()); const float fBBRadius = bbox.getBoundingSphere().m_fRadius; float fFovX, fFovY; Vision::Contexts.GetMainRenderContext()->GetFinalFOV(fFovX, fFovY); const float fDist = fBBRadius / hkvMath::tanDeg(hkvMath::Min(fFovX, fFovY) * 0.5f); VOrbitCamera* pOrbitCamera = new VOrbitCamera(); pOrbitCamera->MinimalDistance = fDist * 0.01f; pOrbitCamera->MaximalDistance = fDist * 100.0f; pOrbitCamera->CameraDistance = fDist; pCenterEntity->AddComponent(pOrbitCamera); }