16class [[nodiscard]] alignas(JPH_VECTOR_ALIGNMENT)
Vec3
22#if defined(JPH_USE_SSE)
24#elif defined(JPH_USE_NEON)
25 using Type = float32x4_t;
36 Vec3 & operator = (
const Vec3 &inRHS) =
default;
44 JPH_INLINE
Vec3(
float inX,
float inY,
float inZ);
61 static JPH_INLINE
Vec3 sReplicate(
float inV);
64 static JPH_INLINE
Vec3 sLoadFloat3Unsafe(
const Float3 &inV);
108 static JPH_INLINE
Vec3 sUnitSpherical(
float inTheta,
float inPhi);
114 template <
class Random>
115 static inline Vec3 sRandom(Random &inRandom);
118#if defined(JPH_USE_SSE)
119 JPH_INLINE
float GetX()
const {
return _mm_cvtss_f32(mValue); }
120 JPH_INLINE
float GetY()
const {
return mF32[1]; }
121 JPH_INLINE
float GetZ()
const {
return mF32[2]; }
122#elif defined(JPH_USE_NEON)
123 JPH_INLINE
float GetX()
const {
return vgetq_lane_f32(mValue, 0); }
124 JPH_INLINE
float GetY()
const {
return vgetq_lane_f32(mValue, 1); }
125 JPH_INLINE
float GetZ()
const {
return vgetq_lane_f32(mValue, 2); }
138 JPH_INLINE
void Set(
float inX,
float inY,
float inZ) { *
this =
Vec3(inX, inY, inZ); }
141 JPH_INLINE
float operator [] (
uint inCoordinate)
const {
JPH_ASSERT(inCoordinate < 3);
return mF32[inCoordinate]; }
147 JPH_INLINE
bool operator == (
Vec3Arg inV2)
const;
148 JPH_INLINE
bool operator != (
Vec3Arg inV2)
const {
return !(*
this == inV2); }
151 JPH_INLINE
bool IsClose(
Vec3Arg inV2,
float inMaxDistSq = 1.0e-12f)
const;
154 JPH_INLINE
bool IsNearZero(
float inMaxDistSq = 1.0e-12f)
const;
157 JPH_INLINE
bool IsNormalized(
float inTolerance = 1.0e-6f)
const;
160 JPH_INLINE
bool IsNaN()
const;
172 JPH_INLINE
Vec3 operator / (
float inV2)
const;
175 JPH_INLINE
Vec3 & operator *= (
float inV2);
181 JPH_INLINE
Vec3 & operator /= (
float inV2);
190 JPH_INLINE
Vec3 operator - ()
const;
202 template<u
int32 SwizzleX, u
int32 SwizzleY, u
int32 SwizzleZ>
242 JPH_INLINE
float Length()
const;
275 template <
int X,
int Y,
int Z>
285 friend ostream & operator << (ostream &inStream,
Vec3Arg inV)
287 inStream << inV.
mF32[0] <<
", " << inV.
mF32[1] <<
", " << inV.
mF32[2];
304static_assert(std::is_trivial<Vec3>(),
"Is supposed to be a trivial type!");
#define JPH_EXPORT
Definition Core.h:275
unsigned int uint
Definition Core.h:500
#define JPH_NAMESPACE_END
Definition Core.h:425
std::uint32_t uint32
Definition Core.h:503
#define JPH_NAMESPACE_BEGIN
Definition Core.h:419
DVec3 operator*(double inV1, DVec3Arg inV2)
Definition DVec3.inl:456
#define JPH_ASSERT(...)
Definition IssueReporting.h:33
const Vec4 Vec4Arg
Definition MathTypes.h:25
const Vec3 Vec3Arg
Definition MathTypes.h:19
const UVec4 UVec4Arg
Definition MathTypes.h:26
#define JPH_OVERRIDE_NEW_DELETE
Macro to override the new and delete functions.
Definition Memory.h:50
Class that holds 3 floats. Used as a storage class. Convert to Vec3 for calculations.
Definition Float3.h:13
Simple variable length array backed by a fixed size buffer.
Definition StaticArray.h:14
JPH_INLINE float Dot(Vec3Arg inV2) const
Dot product.
Definition Vec3.inl:650
JPH_INLINE Vec3 Normalized() const
Normalize vector.
Definition Vec3.inl:707
static JPH_INLINE Type sFixW(Type inValue)
Internal helper function that ensures that the Z component is replicated to the W component to preven...
Vec4::Type Type
Definition Vec3.h:27
static JPH_INLINE Vec3 sAxisX()
Vectors with the principal axis.
Definition Vec3.h:56
JPH_INLINE Vec4 SplatX() const
Replicate the X component to all components.
Definition Vec3.inl:534
JPH_INLINE void SetComponent(uint inCoordinate, float inValue)
Set float component by index.
Definition Vec3.h:144
JPH_INLINE Vec3 Cross(Vec3Arg inV2) const
Cross product.
Definition Vec3.inl:595
JPH_INLINE Vec3 GetNormalizedPerpendicular() const
Get normalized vector that is perpendicular to this vector.
Definition Vec3.inl:827
Vec3(const Vec3 &inRHS)=default
static JPH_INLINE Vec3 sAxisY()
Definition Vec3.h:57
JPH_INLINE float GetX() const
Get individual components.
Definition Vec3.h:127
static JPH_INLINE Vec3 sDecompressUnitVector(uint32 inValue)
Decompress a unit vector from a 32 bit value.
Definition Vec3.inl:908
JPH_INLINE float Length() const
Length of vector.
Definition Vec3.inl:682
JPH_INLINE float ReduceMin() const
Get the minimum of X, Y and Z.
Definition Vec3.inl:813
JPH_INLINE float ReduceMax() const
Get the maximum of X, Y and Z.
Definition Vec3.inl:820
JPH_INLINE int GetLowestComponentIndex() const
Get index of component with lowest value.
Definition Vec3.inl:567
JPH_INLINE void SetY(float inY)
Definition Vec3.h:134
JPH_INLINE Vec4 DotV4(Vec3Arg inV2) const
Dot product, returns the dot product in X, Y, Z and W components.
Definition Vec3.inl:634
JPH_INLINE Vec3 Abs() const
Return the absolute value of each of the components.
Definition Vec3.inl:577
JPH_INLINE Vec3(Type inRHS)
Definition Vec3.h:38
static JPH_INLINE Vec3 sOne()
Vector with all ones.
Definition Vec3.inl:125
JPH_INLINE Vec3 Reciprocal() const
Reciprocal vector (1 / value) for each of the components.
Definition Vec3.inl:590
JPH_INLINE Vec3 NormalizedOr(Vec3Arg inZeroValue) const
Normalize vector or return inZeroValue if the length of the vector is zero.
Definition Vec3.inl:721
JPH_INLINE Vec3 FlipSign() const
Flips the signs of the components, e.g. FlipSign<-1, 1, -1>() will flip the signs of the X and Z comp...
Definition Vec3.inl:861
JPH_INLINE uint32 CompressUnitVector() const
Compress a unit vector to a 32 bit value, precision is around 10^-4.
Definition Vec3.inl:869
JPH_INLINE Vec4 SplatZ() const
Replicate the Z component to all components.
Definition Vec3.inl:556
Vec3Arg ArgType
Definition Vec3.h:31
JPH_INLINE void SetZ(float inZ)
Definition Vec3.h:135
JPH_INLINE void CheckW() const
Internal helper function that checks that W is equal to Z, so e.g. dividing by it should not generate...
static JPH_INLINE Vec3 sAxisZ()
Definition Vec3.h:58
JPH_INLINE UVec4 ToInt() const
Convert each component from a float to an int.
Definition Vec3.inl:791
JPH_INLINE void SetX(float inX)
Set individual components.
Definition Vec3.h:133
Type mValue
Definition Vec3.h:299
JPH_INLINE float GetY() const
Definition Vec3.h:128
JPH_INLINE Vec4 SplatY() const
Replicate the Y component to all components.
Definition Vec3.inl:545
JPH_INLINE void StoreFloat3(Float3 *outV) const
Store 3 floats to memory.
Definition Vec3.inl:772
JPH_INLINE float LengthSq() const
Squared length of vector.
Definition Vec3.inl:666
float mF32[4]
Definition Vec3.h:300
static JPH_INLINE Vec3 sZero()
Vector with all zeros.
Definition Vec3.inl:103
JPH_INLINE void Set(float inX, float inY, float inZ)
Set all components.
Definition Vec3.h:138
JPH_INLINE Vec3 Sqrt() const
Component wise square root.
Definition Vec3.inl:696
JPH_INLINE UVec4 ReinterpretAsInt() const
Reinterpret Vec3 as a UVec4 (doesn't change the bits).
Definition Vec3.inl:802
JPH_INLINE Vec3 DotV(Vec3Arg inV2) const
Dot product, returns the dot product in X, Y and Z components.
Definition Vec3.inl:618
JPH_INLINE float GetZ() const
Definition Vec3.h:129
JPH_INLINE Vec3 GetSign() const
Get vector that contains the sign of each element (returns 1.0f if positive, -1.0f if negative).
Definition Vec3.inl:841
static JPH_INLINE Vec3 sNaN()
Vector with all NaN's.
Definition Vec3.inl:130
Vec3()=default
Constructor.
JPH_INLINE int GetHighestComponentIndex() const
Get index of component with highest value.
Definition Vec3.inl:572
JPH_INLINE Vec3 Swizzle() const
Swizzle the elements in inV.
struct { float mData[4];} Type
Definition Vec4.h:24