Changeset View
Changeset View
Standalone View
Standalone View
source/renderer/ShadowMap.cpp
Show First 20 Lines • Show All 144 Lines • ▼ Show 20 Lines | void CalculateBoundsForCascade( | ||||
const CVector3D cameraIn = camera.m_Orientation.GetIn(); | const CVector3D cameraIn = camera.m_Orientation.GetIn(); | ||||
const CVector3D cameraTranslation = camera.m_Orientation.GetTranslation(); | const CVector3D cameraTranslation = camera.m_Orientation.GetTranslation(); | ||||
const CVector3D centerNear = cameraTranslation + cameraIn * nearPlane; | const CVector3D centerNear = cameraTranslation + cameraIn * nearPlane; | ||||
const CVector3D centerDist = cameraTranslation + cameraIn * farPlane; | const CVector3D centerDist = cameraTranslation + cameraIn * farPlane; | ||||
// We can solve 3D problem in 2D space, because the frustum is | // We can solve 3D problem in 2D space, because the frustum is | ||||
// symmetric by 2 planes. Than means we can use only one corner | // symmetric by 2 planes. Than means we can use only one corner | ||||
// to find a circumscribed sphere. | // to find a circumscribed sphere. | ||||
CCamera::Quad corners; | CCamera::Quad corners = camera.GetViewQuad(nearPlane); | ||||
camera.GetViewQuad(nearPlane, corners); | |||||
for (CVector3D& corner : corners) | for (CVector3D& corner : corners) | ||||
corner = camera.GetOrientation().Transform(corner); | corner = camera.GetOrientation().Transform(corner); | ||||
const CVector3D cornerNear = corners[0]; | const CVector3D cornerNear = corners[0]; | ||||
for (const CVector3D& corner : corners) | for (const CVector3D& corner : corners) | ||||
*frustumBBAA += lightTransform.Transform(corner); | *frustumBBAA += lightTransform.Transform(corner); | ||||
camera.GetViewQuad(farPlane, corners); | corners = camera.GetViewQuad(farPlane); | ||||
for (CVector3D& corner : corners) | for (CVector3D& corner : corners) | ||||
corner = camera.GetOrientation().Transform(corner); | corner = camera.GetOrientation().Transform(corner); | ||||
const CVector3D cornerDist = corners[0]; | const CVector3D cornerDist = corners[0]; | ||||
for (const CVector3D& corner : corners) | for (const CVector3D& corner : corners) | ||||
*frustumBBAA += lightTransform.Transform(corner); | *frustumBBAA += lightTransform.Transform(corner); | ||||
// We solve 2D case for the right trapezoid. | // We solve 2D case for the right trapezoid. | ||||
const float firstBase = (cornerNear - centerNear).Length(); | const float firstBase = (cornerNear - centerNear).Length(); | ||||
▲ Show 20 Lines • Show All 292 Lines • Show Last 20 Lines |
Wildfire Games · Phabricator