| 123456789101112131415161718192021222324252627282930313233343536373839404142 |
- /*
- * Copyright (c) Contributors to the Open 3D Engine Project.
- * For complete copyright and license terms please see the LICENSE at the root of this distribution.
- *
- * SPDX-License-Identifier: Apache-2.0 OR MIT
- *
- */
- #pragma once
- namespace AZ
- {
- class Quaternion;
- class Transform;
- class Vector3;
- }
- namespace WhiteBox
- {
- //! Intersect a segment with a cylinder
- //! Reference: Real-Time Collision Detection - 5.3.7 Intersecting Ray or Segment Against Cylinder
- //! @note: This exists because the version in AzCore has bugs. Should consider moving this to AzCore
- //! @param sa The start of the line segment
- //! @param sb The end of the line segment
- //! @param p The base of the cylinder
- //! @param q The top of the cylinder
- //! @param r The radius of the cylinder
- //! @param t The normalized distance along the line segment
- //! @return if an intersection occured or not
- bool IntersectSegmentCylinder(
- const AZ::Vector3& sa, const AZ::Vector3& sb, const AZ::Vector3& p, const AZ::Vector3& q, float r, float& t);
- //! Take a point in 'local' space, transform it to the new space, scale it uniformly, then return to 'local' space.
- AZ::Vector3 ScalePosition(float scale, const AZ::Vector3& localPosition, const AZ::Transform& localFromSpace);
- //! Hughes/Moeller calculate orthonormal basis.
- void CalculateOrthonormalBasis(const AZ::Vector3& n, AZ::Vector3& b1, AZ::Vector3& b2);
- //! Calculates local orientation from the orthonormal basis of the specified normal vector.
- AZ::Quaternion CalculateLocalOrientation(const AZ::Vector3& normal);
- } // namespace WhiteBox
|