Merge branch stabilization/2110 into development

Signed-off-by: Chris Burel <burelc@amazon.com>
This commit is contained in:
Chris Burel
2021-11-04 13:44:25 -07:00
@@ -47,53 +47,60 @@ namespace AZ::Render
return m_shapeBus->GetRadius() * GetTransform().GetUniformScale(); return m_shapeBus->GetRadius() * GetTransform().GetUniformScale();
} }
void DiskLightDelegate::DrawDebugDisplay(const Transform& transform, const Color& /*color*/, AzFramework::DebugDisplayRequests& debugDisplay, bool isSelected) const void DiskLightDelegate::DrawDebugDisplay(const Transform& transform, [[maybe_unused]]const Color&, AzFramework::DebugDisplayRequests& debugDisplay, bool isSelected) const
{ {
if (isSelected) debugDisplay.PushMatrix(transform);
const float radius = GetConfig()->m_attenuationRadius;
const float shapeRadius = m_shapeBus->GetRadius();
auto DrawConicalFrustum = [&debugDisplay](uint32_t numRadiusLines, const Color& color, float brightness, float topRadius, float bottomRadius, float height)
{ {
debugDisplay.PushMatrix(transform); const Color displayColor = Color(color.GetAsVector3() * brightness);
float radius = GetConfig()->m_attenuationRadius; debugDisplay.SetColor(displayColor);
debugDisplay.DrawWireDisk(Vector3(0.0, 0.0, height), Vector3::CreateAxisZ(), bottomRadius);
if (GetConfig()->m_enableShutters) for (uint32_t i = 0; i < numRadiusLines; ++i)
{ {
float radiusLineAngle = float(i) / numRadiusLines * Constants::TwoPi;
float innerRadians = DegToRad(GetConfig()->m_innerShutterAngleDegrees); float cosAngle = cos(radiusLineAngle);
float outerRadians = DegToRad(GetConfig()->m_outerShutterAngleDegrees); float sinAngle = sin(radiusLineAngle);
debugDisplay.DrawLine(
// Draw a cone using the cone angle and attenuation radius Vector3(cosAngle * topRadius, sinAngle * topRadius, 0),
innerRadians = GetMin(innerRadians, outerRadians); Vector3(cosAngle * bottomRadius,sinAngle * bottomRadius, height)
float coneRadiusInner = sin(innerRadians) * radius; );
float coneHeightInner = cos(innerRadians) * radius;
float coneRadiusOuter = sin(outerRadians) * radius;
float coneHeightOuter = cos(outerRadians) * radius;
auto DrawConicalFrustum = [&debugDisplay](uint32_t numRadiusLines, float topRadius, float bottomRadius, float height, float brightness)
{
debugDisplay.SetColor(Color(brightness, brightness, brightness, 1.0f));
debugDisplay.DrawWireDisk(Vector3(0.0, 0.0, height), Vector3::CreateAxisZ(), bottomRadius);
for (uint32_t i = 0; i < numRadiusLines; ++i)
{
float radiusLineAngle = float(i) / numRadiusLines * Constants::TwoPi;
debugDisplay.DrawLine(
Vector3(cos(radiusLineAngle) * topRadius, sin(radiusLineAngle) * topRadius, 0),
Vector3(cos(radiusLineAngle) * bottomRadius, sin(radiusLineAngle) * bottomRadius, height)
);
}
};
DrawConicalFrustum(16, m_shapeBus->GetRadius(), m_shapeBus->GetRadius() + coneRadiusInner, coneHeightInner, 1.0f);
DrawConicalFrustum(16, m_shapeBus->GetRadius(), m_shapeBus->GetRadius() + coneRadiusOuter, coneHeightOuter, 0.65f);
} }
else };
{
debugDisplay.DrawWireDisk(Vector3::CreateZero(), Vector3::CreateAxisZ(), radius); const Color coneColor = isSelected ? Color::CreateOne() : Color(0.0f, 0.75f, 0.75f, 1.0);
debugDisplay.DrawArc(Vector3::CreateZero(), radius, 270.0f, 180.0f, 3.0f, 0); const uint32_t innerConeLines = 8;
debugDisplay.DrawArc(Vector3::CreateZero(), radius, 0.0f, 180.0f, 3.0f, 1); float innerRadians, outerRadians;
} if (GetConfig()->m_enableShutters)
debugDisplay.PopMatrix(); { // With shutters enabled, draw inner and outer debug display frustums
innerRadians = DegToRad(GetConfig()->m_innerShutterAngleDegrees);
outerRadians = DegToRad(GetConfig()->m_outerShutterAngleDegrees);
// Draw a cone using the cone angle and attenuation radius
innerRadians = GetMin(innerRadians, outerRadians);
float coneRadiusOuter = sin(outerRadians) * radius;
float coneHeightOuter = cos(outerRadians) * radius;
// Outer cone frustum 'faded' debug cone
const uint32_t outerConeLines = 9;
DrawConicalFrustum(outerConeLines, coneColor, 0.75f, shapeRadius, shapeRadius + coneRadiusOuter, coneHeightOuter);
} }
else
{ // Generic debug display frustum
const float coneAngle = 25.0f;
innerRadians = DegToRad(coneAngle); // 25 degrees debug display
}
// Inner cone frustum
float coneRadiusInner = sin(innerRadians) * radius;
float coneHeightInner = cos(innerRadians) * radius;
DrawConicalFrustum(innerConeLines, coneColor, 1.0f, shapeRadius, shapeRadius + coneRadiusInner, coneHeightInner);
debugDisplay.PopMatrix();
} }
void DiskLightDelegate::SetEnableShutters(bool enabled) void DiskLightDelegate::SetEnableShutters(bool enabled)