From 45055ab3cc29bce1a2a31ee8847e3ddfb36fbee7 Mon Sep 17 00:00:00 2001 From: greerdv Date: Mon, 10 May 2021 22:01:41 +0100 Subject: [PATCH] applying debug draw transform stack to DrawLines and DrawTriangles --- .../AtomDebugDisplayViewportInterface.cpp | 31 +++++++++++++++---- .../AtomDebugDisplayViewportInterface.h | 6 ++++ 2 files changed, 31 insertions(+), 6 deletions(-) diff --git a/Gems/AtomLyIntegration/AtomBridge/Code/Source/AtomDebugDisplayViewportInterface.cpp b/Gems/AtomLyIntegration/AtomBridge/Code/Source/AtomDebugDisplayViewportInterface.cpp index 8a063cd7a7..7a8d6b7494 100644 --- a/Gems/AtomLyIntegration/AtomBridge/Code/Source/AtomDebugDisplayViewportInterface.cpp +++ b/Gems/AtomLyIntegration/AtomBridge/Code/Source/AtomDebugDisplayViewportInterface.cpp @@ -506,9 +506,10 @@ namespace AZ::AtomBridge { if (m_auxGeomPtr) { + AZStd::vector transformedVertices = ToWorldSpacePosition(vertices); AZ::RPI::AuxGeomDraw::AuxGeomDynamicDrawArguments drawArgs; - drawArgs.m_verts = vertices.data(); - drawArgs.m_vertCount = aznumeric_cast(vertices.size()); + drawArgs.m_verts = transformedVertices.data(); + drawArgs.m_vertCount = aznumeric_cast(transformedVertices.size()); drawArgs.m_colors = &color; drawArgs.m_colorCount = 1; drawArgs.m_opacityType = m_rendState.m_opacityType; @@ -526,9 +527,10 @@ namespace AZ::AtomBridge { if (m_auxGeomPtr) { + AZStd::vector transformedVertices = ToWorldSpacePosition(vertices); AZ::RPI::AuxGeomDraw::AuxGeomDynamicIndexedDrawArguments drawArgs; - drawArgs.m_verts = vertices.data(); - drawArgs.m_vertCount = aznumeric_cast(vertices.size()); + drawArgs.m_verts = transformedVertices.data(); + drawArgs.m_vertCount = aznumeric_cast(transformedVertices.size()); drawArgs.m_indices = indices.data(); drawArgs.m_indexCount = aznumeric_cast(indices.size()); drawArgs.m_colors = &color; @@ -659,9 +661,10 @@ namespace AZ::AtomBridge { if (m_auxGeomPtr) { + AZStd::vector transformedLines = ToWorldSpacePosition(lines); AZ::RPI::AuxGeomDraw::AuxGeomDynamicDrawArguments drawArgs; - drawArgs.m_verts = lines.data(); - drawArgs.m_vertCount = aznumeric_cast(lines.size()); + drawArgs.m_verts = transformedLines.data(); + drawArgs.m_vertCount = aznumeric_cast(transformedLines.size()); drawArgs.m_colors = &color; drawArgs.m_colorCount = 1; drawArgs.m_size = m_rendState.m_lineWidth; @@ -1513,6 +1516,22 @@ namespace AZ::AtomBridge return m_rendState.m_transformStack[m_rendState.m_currentTransform]; } + AZStd::vector AtomDebugDisplayViewportInterface::ToWorldSpacePosition(const AZStd::vector& positions) const + { + AZStd::vector transformedPositions; + transformedPositions.resize_no_construct(positions.size()); + AZStd::transform(positions.begin(), positions.end(), transformedPositions.begin(), [this](const AZ::Vector3& position){ return ToWorldSpacePosition(position); }); + return transformedPositions; + } + + AZStd::vector AtomDebugDisplayViewportInterface::ToWorldSpaceVector(const AZStd::vector& vectors) const + { + AZStd::vector transformedVectors; + transformedVectors.resize_no_construct(vectors.size()); + AZStd::transform(vectors.begin(), vectors.end(), transformedVectors.begin(), [this](const AZ::Vector3& vector) { return ToWorldSpaceVector(vector); }); + return transformedVectors; + } + AZ::RPI::ViewportContextPtr AtomDebugDisplayViewportInterface::GetViewportContext() const { auto viewContextManager = AZ::Interface::Get(); diff --git a/Gems/AtomLyIntegration/AtomBridge/Code/Source/AtomDebugDisplayViewportInterface.h b/Gems/AtomLyIntegration/AtomBridge/Code/Source/AtomDebugDisplayViewportInterface.h index c872e2b81e..5edd1f0a02 100644 --- a/Gems/AtomLyIntegration/AtomBridge/Code/Source/AtomDebugDisplayViewportInterface.h +++ b/Gems/AtomLyIntegration/AtomBridge/Code/Source/AtomDebugDisplayViewportInterface.h @@ -249,6 +249,12 @@ namespace AZ::AtomBridge //! Convert direction to world space (translation is not considered) AZ::Vector3 ToWorldSpaceVector(const AZ::Vector3& v) const { return m_rendState.m_transformStack[m_rendState.m_currentTransform].Multiply3x3(v); } + //! Convert position to world space. + AZStd::vector ToWorldSpacePosition(const AZStd::vector& positions) const; + + //! Convert direction to world space (translation is not considered) + AZStd::vector ToWorldSpaceVector(const AZStd::vector& vectors) const; + void CalcBasisVectors(const AZ::Vector3& n, AZ::Vector3& b1, AZ::Vector3& b2) const; const AZ::Matrix3x4& GetCurrentTransform() const;