Merge branch stabilization/2110 into development
Signed-off-by: Chris Burel <burelc@amazon.com>
This commit is contained in:
+48
-41
@@ -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)
|
||||||
|
|||||||
Reference in New Issue
Block a user