40 std::array<float, 3>
mVF;
48 JPL_INLINE
constexpr MinimalVec3(
float x,
float y,
float z) noexcept :
X(x),
Y(y),
Z(z) {}
54 [[nodiscard]] JPL_INLINE
constexpr float LengthSquared() const noexcept {
return X *
X +
Y *
Y +
Z *
Z; }
72 return fallbackDirection;
87 return fallbackDirection;
92 const float invLength = 1.0f / outLength;
101 template<
typename Arg>
requires(std::is_arithmetic_v<Arg>)
102 [[nodiscard]] JPL_INLINE
constexpr MinimalVec3 operator*(Arg Scale)
const noexcept {
return MinimalVec3(
X * (
float)Scale,
Y * (
float)Scale,
Z * (
float)Scale); }
103 template<
typename Arg>
requires(std::is_arithmetic_v<Arg>)
104 [[nodiscard]] JPL_INLINE
constexpr MinimalVec3 operator/(Arg Scale)
const noexcept {
return MinimalVec3(
X / (
float)Scale,
Y / (
float)Scale,
Z / (
float)Scale); }
109 template<
typename Arg>
requires(std::is_arithmetic_v<Arg>)
110 JPL_INLINE
constexpr MinimalVec3&
operator/=(Arg Scale)
noexcept {
X /= (float)Scale;
Y /= (float)Scale;
Z /= (float)Scale;
return *
this; }
112 template<
typename Arg>
requires(std::is_arithmetic_v<Arg>)
113 JPL_INLINE
constexpr MinimalVec3&
operator*=(Arg Scale)
noexcept {
X *= (float)Scale;
Y *= (float)Scale;
Z *= (float)Scale;
return *
this; }
119 template<
typename T>
requires(std::is_arithmetic_v<T>)
121 template<
typename T>
requires(std::is_arithmetic_v<T>)
127 [[nodiscard]]
static JPL_INLINE
constexpr float LengthSquared(
const MinimalVec3& V)
noexcept {
return V.
LengthSquared(); }
128 [[nodiscard]]
static JPL_INLINE
constexpr float Length(
const MinimalVec3& V)
noexcept {
return V.
Length(); }
129 static JPL_INLINE
constexpr MinimalVec3& Normalize(MinimalVec3& V)
noexcept {
return V.
Normalize(); }
130 [[nodiscard]]
static JPL_INLINE
constexpr MinimalVec3 Normalized(
const MinimalVec3& V)
noexcept {
return MinimalVec3(V).Normalize(); }
131 [[nodiscard]]
static JPL_INLINE
constexpr float DotProduct(
const MinimalVec3& A,
const MinimalVec3& B)
noexcept{
return A.X * B.X + A.Y * B.Y + A.Z * B.Z; }
132 [[nodiscard]]
static JPL_INLINE
constexpr MinimalVec3 CrossProduct(
const MinimalVec3& A,
const MinimalVec3& B)
noexcept
135 A.Y * B.Z - A.Z * B.Y,
136 A.Z * B.X - A.X * B.Z,
137 A.X * B.Y - A.Y * B.X
147 [[nodiscard]]
static JPL_INLINE
float GetX(
const MinimalVec3& v)
noexcept {
return v.X; }
148 [[nodiscard]]
static JPL_INLINE
float GetY(
const MinimalVec3& v)
noexcept {
return v.Y; }
149 [[nodiscard]]
static JPL_INLINE
float GetZ(
const MinimalVec3& v)
noexcept {
return v.Z; }
156 inline std::ostream&
operator<<(std::ostream& os,
const MinimalVec3& v) { os <<
"{ " << v.
X <<
", " << v.
Y <<
", " << v.
Z <<
" }";
return os; }
JPL_INLINE constexpr T InvSqrt(T x) noexcept
Definition Math.h:283
JPL_INLINE constexpr T Sqrt(T x) noexcept
Definition Math.h:269
JPL_INLINE constexpr bool IsNearlyZero(T value, T errorTolerance=JPL_FLOAT_EPS_V< T >) noexcept
Definition Math.h:146
JPL_INLINE constexpr auto Abs(const T &value) noexcept
Standard abs is not constexpr in C++20.
Definition Math.h:87
Definition AcousticMaterial.h:36
std::uint32_t uint32
Definition Core.h:311
JPL_INLINE constexpr Vec2 operator/(T Scale, const JPL::Vec2 &V) noexcept
Definition MinimalVec2.h:64
JPL_INLINE constexpr bool operator==(const Vec2 &A, const Vec2 &B) noexcept
Definition MinimalVec2.h:59
JPL_INLINE constexpr Vec2 operator*(T Scale, const JPL::Vec2 &V) noexcept
Definition MinimalVec2.h:62
std::ostream & operator<<(std::ostream &os, const AcousticMaterial &v)
Definition AcousticMaterial.h:104
Definition MinimalVec3.h:37
JPL_INLINE constexpr MinimalVec3 operator-() const
Definition MinimalVec3.h:97
JPL_INLINE constexpr float Length() const noexcept
Definition MinimalVec3.h:55
JPL_INLINE constexpr MinimalVec3(float x, float y, float z) noexcept
Definition MinimalVec3.h:48
JPL_INLINE constexpr float LengthSquared() const noexcept
Definition MinimalVec3.h:54
JPL_INLINE constexpr MinimalVec3 SafeNormal(float &outLength, const MinimalVec3 &fallbackDirection, float tolerance=JPL_FLOAT_EPS) const noexcept
Definition MinimalVec3.h:81
JPL_INLINE constexpr MinimalVec3 operator-(const MinimalVec3 &V) const
Definition MinimalVec3.h:98
JPL_INLINE constexpr MinimalVec3 SafeNormal(const MinimalVec3 &fallbackDirection, float tolerance=JPL_FLOAT_EPS) const noexcept
Definition MinimalVec3.h:67
JPL_INLINE constexpr void operator+=(const MinimalVec3 &V) noexcept
Definition MinimalVec3.h:106
float Y
Definition MinimalVec3.h:43
JPL_INLINE constexpr MinimalVec3 & Normalize() noexcept
Definition MinimalVec3.h:57
JPL_INLINE constexpr MinimalVec3 operator+(const MinimalVec3 &V) const
Definition MinimalVec3.h:99
static JPL_INLINE constexpr MinimalVec3 Zero() noexcept
Definition MinimalVec3.h:50
float Z
Definition MinimalVec3.h:43
JPL_INLINE constexpr float operator[](uint32 coordinate) const
Definition MinimalVec3.h:52
JPL_INLINE constexpr MinimalVec3 & operator*=(const MinimalVec3 Other)
Definition MinimalVec3.h:107
float X
Definition MinimalVec3.h:43
std::array< float, 3 > mVF
Definition MinimalVec3.h:40
static JPL_INLINE float GetY(const MinimalVec3 &v) noexcept
Definition MinimalVec3.h:148
static JPL_INLINE void SetZ(MinimalVec3 &v, float value) noexcept
Definition MinimalVec3.h:153
static JPL_INLINE void SetX(MinimalVec3 &v, float value) noexcept
Definition MinimalVec3.h:151
static JPL_INLINE float GetX(const MinimalVec3 &v) noexcept
Definition MinimalVec3.h:147
static JPL_INLINE void SetY(MinimalVec3 &v, float value) noexcept
Definition MinimalVec3.h:152
static JPL_INLINE float GetZ(const MinimalVec3 &v) noexcept
Definition MinimalVec3.h:149
Definition Vec3Traits.h:30