33 #include <AK/SoundEngine/Common/AkTypes.h>
34 #include <AK/SoundEngine/Common/AkSimd.h>
35 #include <AK/SoundEngine/Common/AkSpeakerVolumes.h>
36 #include <AK/SoundEngine/Common/IAkPluginMemAlloc.h>
37 #include <AK/Tools/Common/AkArray.h>
38 #include <AK/Tools/Common/AkObject.h>
47 #define AKVECTORS_PI (3.1415926535897932384626433832795f)
48 #define AKVECTORS_TWOPI (6.283185307179586476925286766559f)
49 #define AKVECTORS_PIOVERTWO (1.5707963267948966192313216916398f)
50 #define AKVECTORS_EPSILON (1.0e-38f) // epsilon value for fast log(0)
101 p.
v[0] =
v[0] - b.
v[0];
102 p.
v[1] =
v[1] - b.
v[1];
103 p.
v[2] =
v[2] - b.
v[2];
104 p.
v[3] =
v[3] - b.
v[3];
158 X = AKSIMD_GETELEMENT_V4F32(in_v4f32, 0);
159 Y = AKSIMD_GETELEMENT_V4F32(in_v4f32, 1);
160 Z = AKSIMD_GETELEMENT_V4F32(in_v4f32, 2);
165 AKSIMD_GETELEMENT_V4F32(v4f32, 0) =
X;
166 AKSIMD_GETELEMENT_V4F32(v4f32, 1) =
Y;
167 AKSIMD_GETELEMENT_V4F32(v4f32, 2) =
Z;
168 AKSIMD_GETELEMENT_V4F32(v4f32, 3) = 1.f;
174 AKSIMD_GETELEMENT_V4F32(v4f32, 0) =
X;
175 AKSIMD_GETELEMENT_V4F32(v4f32, 1) =
Y;
176 AKSIMD_GETELEMENT_V4F32(v4f32, 2) =
Z;
177 AKSIMD_GETELEMENT_V4F32(v4f32, 3) = 0.f;
194 return X == b.
X &&
Y == b.
Y &&
Z == b.
Z;
199 return X != b.
X ||
Y != b.
Y ||
Z != b.
Z;
222 return X < b.
X &&
Y < b.
Y &&
Z < b.
Z;
227 return X <= b.
X &&
Y <= b.
Y &&
Z <= b.
Z;
232 return X > b.
X &&
Y > b.
Y &&
Z > b.
Z;
237 return X >= b.
X &&
Y >= b.
Y &&
Z >= b.
Z;
251 AkReal32 oneoverf = 1.f / f;
284 AkReal32 oneoverf = 1.f / f;
340 v.
X =
X; v.
Y =
Y; v.
Z =
Z;
350 min.
X = AkMin(A.
X, B.
X);
351 min.
Y = AkMin(A.
Y, B.
Y);
352 min.
Z = AkMin(A.
Z, B.
Z);
361 max.
X = AkMax(A.
X, B.
X);
362 max.
Y = AkMax(A.
Y, B.
Y);
363 max.
Z = AkMax(A.
Z, B.
Z);
382 const AkReal32 azimuth,
383 const AkReal32 elevation)
385 AkReal32 cosElevation = cosf(elevation);
386 X = cosf(azimuth) * cosElevation;
387 Y = sinf(azimuth) * cosElevation;
399 return (a.
X*b.
Y*c.
Z + a.
Y*b.
Z*c.
X + a.
Z*b.
X*c.
Y) -
400 (a.
Z*b.
Y*c.
X + a.
Y*b.
X*c.
Z + a.
X*b.
Z*c.
Y);
413 if (d < AKVECTORS_EPSILON && d > -AKVECTORS_EPSILON)
415 v.
X = 0.0f; v.
Y = 0.0f; v.
Z = 0.0f;
424 AkReal32 oneover_d = 1.f / d;
430 v.
X =
X * invA.
X +
Y * invB.
X +
Z * invC.
X;
431 v.
Y =
X * invA.
Y +
Y * invB.
Y +
Z * invC.
Y;
432 v.
Z =
X * invA.
Z +
Y * invB.
Z +
Z * invC.
Z;
459 return sqrtf(
X*
X +
Y*
Y +
Z*
Z);
464 return X*v2.
X +
Y*v2.
Y +
Z*v2.
Z;
477 uxv.
X = u.
Y*v.
Z - u.
Z*v.
Y;
478 uxv.
Y = u.
Z*v.
X - u.
X*v.
Z;
479 uxv.
Z = u.
X*v.
Y - u.
Y*v.
X;
486 return sqrtf(
X*
X +
Y*
Y +
Z*
Z);
497 const AkReal32 POSITIVE_TEST_EPSILON = 0.00001f;
498 return X >= -POSITIVE_TEST_EPSILON &&
499 Y >= -POSITIVE_TEST_EPSILON &&
500 Z >= -POSITIVE_TEST_EPSILON;
506 abs.
X = (AkReal32)fabs(abs.
X);
507 abs.
Y = (AkReal32)fabs(abs.
Y);
508 abs.
Z = (AkReal32)fabs(abs.
Z);
571 AkReal32 oneoverf = 1.f / f;
580 return b.
X ==
X && b.
Y ==
Y;
585 return b.
X !=
X && b.
Y !=
Y;
590 return sqrtf(
X*
X+
Y*
Y);
598 AkReal32 r = sqrtf( in_Cartesian.
X*in_Cartesian.
X + in_Cartesian.
Y*in_Cartesian.
Y + in_Cartesian.
Z*in_Cartesian.
Z);
601 X = atan2f(in_Cartesian.
Y, in_Cartesian.
X);
602 Y = asinf(in_Cartesian.
Z / r);
616 AkReal32 d = (A.
X*B.
Y - A.
Y*B.
X);
618 if (d < AKVECTORS_EPSILON && d > -AKVECTORS_EPSILON)
620 v.
X = 0.0f; v.
Y = 0.0f;
627 AkReal32 oneover_d = 1.f / d;
631 v.
X =
X * invA.
X +
Y * invB.
X;
632 v.
Y =
X * invA.
Y +
Y * invB.
Y;
651 if (
X > AKVECTORS_PI)
652 v.
X =
X - AKVECTORS_TWOPI;
654 if (
X < -AKVECTORS_PI)
655 v.
X =
X + AKVECTORS_TWOPI;
657 if (
Y > AKVECTORS_PIOVERTWO)
658 v.
Y =
Y - AKVECTORS_PI;
660 if (
Y < -AKVECTORS_PIOVERTWO)
661 v.
Y =
Y + AKVECTORS_PI;
663 AKASSERT(
X<AKVECTORS_PI);
664 AKASSERT(
Y<AKVECTORS_PIOVERTWO);
677 if (
X > AKVECTORS_PI)
678 X =
X - AKVECTORS_TWOPI;
680 if (
X < -AKVECTORS_PI)
681 X =
X + AKVECTORS_TWOPI;
683 if (
Y > AKVECTORS_PIOVERTWO)
684 Y =
Y - AKVECTORS_PI;
686 if (
Y < -AKVECTORS_PIOVERTWO)
687 Y =
Y + AKVECTORS_PI;
693 const AkReal32 POSITIVE_TEST_EPSILON = 0.00001f;
694 return X >= -POSITIVE_TEST_EPSILON &&
695 Y >= -POSITIVE_TEST_EPSILON;
706 static const int MAX_SIZE = 16;
718 for (
int i = 0; i < MAX_SIZE; i++)
726 for (
int i = 0; i < MAX_SIZE; i++)
750 for (
int i = 0; i < 3; i++)
752 for (
int j = 0; j < 3; j++)
760 AkForceInline AkReal32&
operator()(
const AkUInt32 row,
const AkUInt32 column)
762 return m_Data[column][row];
765 AkForceInline
const AkReal32&
operator()(
const AkUInt32 row,
const AkUInt32 column)
const
767 return m_Data[column][row];
781 Add(*
this, *
this, in_rhs);
787 #define ADD(i,j) out_res(i,j) = in_m0(i,j) + in_m1(i,j)
788 ADD(0, 0); ADD(0, 1); ADD(0, 2);
789 ADD(1, 0); ADD(1, 1); ADD(1, 2);
790 ADD(2, 0); ADD(2, 1); ADD(2, 2);
804 out_mat(0, 0) = in_f; out_mat(0, 1) = 0.f; out_mat(0, 2) = 0.f;
805 out_mat(1, 0) = 0.f; out_mat(1, 1) = in_f; out_mat(1, 2) = 0.f;
806 out_mat(2, 0) = 0.f; out_mat(2, 1) = 0.f; out_mat(2, 2) = in_f;
812 out_mat(0, 0) = 0.f; out_mat(0, 1) = -in_u.
Z; out_mat(0, 2) = in_u.
Y;
813 out_mat(1, 0) = in_u.
Z; out_mat(1, 1) = 0.f; out_mat(1, 2) = -in_u.
X;
814 out_mat(2, 0) = -in_u.
Y; out_mat(2, 1) = in_u.
X; out_mat(2, 2) = 0.f;
819 out_mat(0, 0) = in_v0.
X*in_v1.
X; out_mat(0, 1) = in_v0.
X*in_v1.
Y; out_mat(0, 2) = in_v0.
X*in_v1.
Z;
820 out_mat(1, 0) = in_v0.
Y*in_v1.
X; out_mat(1, 1) = in_v0.
Y*in_v1.
Y; out_mat(1, 2) = in_v0.
Y*in_v1.
Z;
821 out_mat(2, 0) = in_v0.
Z*in_v1.
X; out_mat(2, 1) = in_v0.
Z*in_v1.
Y; out_mat(2, 2) = in_v0.
Z*in_v1.
Z;
826 Rotation(out_mat, sinf(in_angle), cosf(in_angle), in_axis);
835 outer *= (1.f - in_cos);
853 AkQuaternion(AkReal32 in_W, AkReal32 in_X, AkReal32 in_Y, AkReal32 in_Z) :
869 return sqrtf(
W*
W +
X*
X +
Y*
Y +
Z*
Z );
874 AkReal32 f = 1.0f /
Length();
884 AkReal32 norm =
W*
W +
X*
X +
Y*
Y +
Z*
Z;
887 AkReal32 invNorm = 1.0f / norm;
899 AkReal32 dot = in_v0.
Dot(in_v1);
900 if (dot >= 1.0f - AKVECTORS_EPSILON)
905 if (dot <= -1.f - AKVECTORS_EPSILON)
909 AkReal32 len = axis.
Length();
910 if (len < AKVECTORS_EPSILON)
920 AkReal32 sqrt = sqrtf((1.f + dot) * 2.f);
921 AkReal32 invs = 1.f / sqrt;
936 AkReal32 cosHalfAngle = cosf(in_angle / 2.f);
938 X = cosHalfAngle*in_axis.
X;
939 Y = cosHalfAngle*in_axis.
Y;
940 Z = cosHalfAngle*in_axis.
Z;
969 u * u.
Dot(in_v) * 2.f
970 + in_v * (
W*
W - u.
Dot(u))
971 + u.
Cross(in_v) *
W * 2.0f;
993 mint = 1.175494351e-38F;
994 maxt = 3.402823466e+38F;
1004 mint = 1.175494351e-38F;
1005 maxt = 3.402823466e+38F;
1052 AkReal32 distsqrd = ((P2 + V2*s) - (P1 + V1*t)).LengthSquared();
1054 if ((AkReal32)fabs(v1CrossV2.
L2_Norm()) >= AKVECTORS_EPSILON
1058 #ifdef AKPORTALS_DEBUG
1077 #ifdef AKPORTALS_DEBUG
1121 AKASSERT(in_p1.
X < 100000 && in_p1.
X > -100000);
1122 AKASSERT(in_p1.
Y < 100000 && in_p1.
Y > -100000);
1123 AKASSERT(in_p1.
Z < 100000 && in_p1.
Z > -100000);
1125 AKASSERT(in_p2.
X < 100000 && in_p2.
X > -100000);
1126 AKASSERT(in_p2.
Y < 100000 && in_p2.
Y > -100000);
1127 AKASSERT(in_p2.
Z < 100000 && in_p2.
Z > -100000);
1129 AKASSERT(in_p4.
X < 100000 && in_p4.
X > -100000);
1130 AKASSERT(in_p4.
Y < 100000 && in_p4.
Y > -100000);
1131 AKASSERT(in_p4.
Z < 100000 && in_p4.
Z > -100000);
1141 D = -(N.
X*p1.
X) - (N.
Y*p1.
Y) - (N.
Z*p1.
Z);
1144 #define EPSILON 0.01f
1156 AkReal32 rayLength = ray.
Length();
1161 if (rayLength <= EPSILON)
1165 if (dot < EPSILON && dot > -EPSILON)
1167 intersect = in_Origin;
1172 out_Intersection = p1;
1186 if ((A*ray.
X + B*ray.
Y + C*ray.
Z) == 0.0f)
1189 AkReal32 t = -(A*in_Origin.X + B*in_Origin.Y + C*in_Origin.Z + D) / (A*ray.
X + B*ray.
Y + C*ray.
Z);
1190 intersect =
Ak3DVector(in_Origin.X + ray.
X*t, in_Origin.Y + ray.
Y*t, in_Origin.Z + ray.
Z*t);
1191 out_Intersection = intersect;
1197 AkReal32 t = -(A*in_Origin.X + B*in_Origin.Y + C*in_Origin.Z + D) / (A*ray.
X + B*ray.
Y + C*ray.
Z);
1200 if (t < -EPSILON || t >(rayLength + EPSILON))
1203 intersect =
Ak3DVector(in_Origin.X + ray.
X*t, in_Origin.Y + ray.
Y*t, in_Origin.Z + ray.
Z*t);
1204 out_Intersection = intersect;
1209 intersect =
Ak3DVector(in_Origin.X + ray.
X*t, in_Origin.Y + ray.
Y*t, in_Origin.Z + ray.
Z*t);
1238 out_Intersection = intersect;
1240 return dot1 >= -EPSILON && dot2 >= -EPSILON && dot3 >= -EPSILON && dot4 >= -EPSILON;
1247 AkReal32 distance = (AkReal32)(AkReal32)fabs(N.
X * in_P.
X + N.
Y * in_P.
Y + N.
Z * in_P.
Z + D);
1250 pointToPlane *= distance;
1252 out_B = in_P + pointToPlane;
1254 return (AkReal32)fabs(distance);
1258 AkReal32* out_mat)
const
1274 AkReal32 d = -(N.
X*p1.
X) - (N.
Y*p1.
Y) - (N.
Z*p1.
Z);
1276 out_mat[0] = 1 - 2 * N.
X*N.
X; out_mat[1] = -2 * N.
X*N.
Y; out_mat[2] = -2 * N.
X*N.
Z; out_mat[3] = -2 * N.
X*d;
1277 out_mat[0 + 4] = -2 * N.
X*N.
Y; out_mat[1 + 4] = 1 - 2 * N.
Y*N.
Y; out_mat[2 + 4] = -2 * N.
Y*N.
Z; out_mat[3 + 4] = -2 * N.
Y*d;
1278 out_mat[0 + 8] = -2 * N.
X*N.
Z; out_mat[1 + 8] = -2 * N.
Y*N.
Z; out_mat[2 + 8] = 1 - 2 * N.
Z*N.
Z; out_mat[3 + 8] = -2 * N.
Z*d;
1279 out_mat[0 + 12] = 0; out_mat[1 + 12] = 0; out_mat[2 + 12] = 0; out_mat[3 + 12] = 1;
1283 AkReal32
GetD()
const {
return D; }
1289 out_Intrs.
count = 0;
1298 AkReal32 D2 = in_PlaneB.
GetD();
1306 AkUInt8 pivotAxis = 0;
1308 if ((AkReal32)fabs(L.
Y) > (AkReal32)fabs(L.
X))
1311 if ((AkReal32)fabs(L.
Z) > (AkReal32)fabs(L.
Y))
1316 else if ((AkReal32)fabs(L.
Z) > (AkReal32)fabs(L.
X))
1330 AKASSERT((AkReal32)fabs(L.
X) > AKVECTORS_EPSILON);
1332 point.
Y = (N1.
Z*D2 - N2.
Z*D1) / L.
X;
1333 point.
Z = (N2.
Y*D1 - N1.
Y*D2) / L.
X;
1336 AKASSERT((AkReal32)fabs(L.
Y) > AKVECTORS_EPSILON);
1337 point.
X = (N1.
Z*D2 - N2.
Z*D1) / L.
Y;
1339 point.
Z = (N2.
X*D1 - N1.
X*D2) / L.
Y;
1342 AKASSERT((AkReal32)fabs(L.
Z) > AKVECTORS_EPSILON);
1343 point.
X = (N1.
Y*D2 - N2.
Y*D1) / L.
Z;
1344 point.
Y = (N2.
X*D1 - N1.
X*D2) / L.
Z;
1363 #ifdef AKPORTALS_DEBUG
1387 #ifdef AKPORTALS_DEBUG
1399 if (cpt < 2 || cpt2 < 2)
1401 #ifdef AKPORTALS_DEBUG
1408 AkReal32 start = AkMax(intrLine.
mint, intrLine2.
mint);
1409 AkReal32 end = AkMin(intrLine.
maxt, intrLine2.
maxt);
1413 #ifdef AKPORTALS_DEBUG
1430 out_Intrs.
points[0] = minPoint;
1431 out_Intrs.
points[1] = maxPoint;
1432 out_Intrs.
count = 2;
1450 AkReal32 len = N.
Length();
1451 AKASSERT(len > 0.f);
1516 return in_Point >=
m_Min && in_Point <=
m_Max;
1550 AKASSERT((in_fAngle <= 1.0f) && (in_fAngle >= -1.0f));
1551 return acosf(in_fAngle);
1580 AKASSERT(fabs(in_Front.
Length() - 1.f) < 0.001 && fabs(in_Up.
Length() - 1.f) < 0.001);
1581 AKASSERT(fabs(in_Front.
Dot(in_Up) - 0.f) < 0.001);
1583 m_Center = in_center;
1584 m_Extent = in_extent;
1588 m_X = m_Z.
Cross(m_Y);
1596 return fabs(pt.
Dot(m_X)) <= m_Extent.
X && fabs(pt.
Dot(m_Y)) <= m_Extent.
Y && fabs(pt.
Dot(m_Z)) <= m_Extent.
Z;
1613 return size.
X * size.
Y * size.
Z;
1622 const AkBox& A = *
this;
1625 AkReal32 WA = A.m_Extent.
X;
1626 AkReal32 HA = A.m_Extent.
Y;
1627 AkReal32 DA = A.m_Extent.
Z;
1629 AkReal32 WB = B.m_Extent.
X;
1630 AkReal32 HB = B.m_Extent.
Y;
1631 AkReal32 DB = B.m_Extent.
Z;
1645 AkReal32 left = (AkReal32)fabs(T.
DotProduct(L));
1646 AkReal32 dpax = (AkReal32)fabs((Ax*WA).DotProduct(L));
1647 AkReal32 dpay = (AkReal32)fabs((Ay*HA).DotProduct(L));
1648 AkReal32 dpaz = (AkReal32)fabs((Az*DA).DotProduct(L));
1649 AkReal32 dpbx = (AkReal32)fabs((Bx*WB).DotProduct(L));
1650 AkReal32 dpby = (AkReal32)fabs((By*HB).DotProduct(L));
1651 AkReal32 dpbz = (AkReal32)fabs((Bz*DB).DotProduct(L));
1653 AkReal32 right = dpax + dpay + dpaz + dpbx + dpby + dpbz;
1655 return left > right;
1661 out_aabb.
Update(m_Center + x);
1662 out_aabb.
Update(m_Center - x);
1664 out_aabb.
Update(m_Center + y);
1665 out_aabb.
Update(m_Center - y);
1667 out_aabb.
Update(m_Center + Z);
1668 out_aabb.
Update(m_Center - Z);
bool FindIntersectionPoints(const AkPlane &in_PlaneB, AkIntersectionPoints &out_Intrs) const
AkReal32 DistPoint_to_Plane(Ak3DVector in_P, Ak3DVector &out_B) const
AkForceInline bool operator<(const Ak3DVector &b) const
AkForceInline Ak3DVector Cross(const Ak3DVector &v) const
AkForceInline Ak2DVector CartesianToSpherical(const Ak3DVector &in_Cartesian)
Ak2DVector operator*=(const AkReal32 f)
AkForceInline Ak3DVector operator-(const Ak3DVector &b) const
AkForceInline Ak3DVector operator*=(const AkReal32 f)
AkForceInline Ak2DVector operator=(const Ak2DVector &b)
AkForceInline AKSIMD_V4F32 VectorV4F32() const
Ak3DVector PointAt(AkReal32 t) const
Ak3DVector(const AKSIMD_V4F32 &in_v4f32)
bool Intersect(Ak3DVector A, Ak3DVector B)
Ak4DVector operator-(const Ak4DVector &b) const
bool SeparatingAxisExists(const Ak3DVector &L, const AkBox &B) const
bool IsPointInBox(const Ak3DVector &in_Point) const
Ak4DVector operator/=(const AkReal32 f)
AkForceInline bool operator==(const Ak3DVector &b) const
AkForceInline Ak3DVector Rotate180X_90Y() const
AkForceInline AkQuaternion Inverse() const
AkForceInline AkQuaternion operator*(const AkQuaternion &Q) const
Quaternion multiplication.
Ak3DIntVector(AkInt32 x, AkInt32 y, AkInt32 z)
void SetPlane(Ak3DVector in_p1, Ak3DVector in_p2, Ak3DVector in_p4)
void OutputDebugMsg(const char *in_pszMsg)
Output a debug message on the console (Ansi string)
AkForceInline AkReal32 DotProduct(const Ak3DVector &v2) const
AkForceInline AkReal32 Length() const
static AkForceInline void Diagonal(AkMatrix3x3 &out_mat, AkReal32 in_f)
AkForceInline AkReal32 Length()
AkMatrix4x4 operator=(AkReal32 *in_Data)
AkForceInline Ak3DVector operator=(const AkVector &b)
static void Rotation(AkMatrix3x3 &out_mat, AkReal32 in_sin, AkReal32 in_cos, const Ak3DVector &in_axis)
AkForceInline bool operator==(const Ak2DVector &b) const
AkForceInline Ak3DVector operator*(const Ak3DVector &in_rhs)
AkForceInline Ak3DVector operator-(const AkReal32 f) const
AkForceInline Ak3DVector operator+(const Ak3DVector &b) const
void UpdateBoundingBox(AkBoundingBox &out_aabb) const
Ak3DVector GetCenter() const
AkForceInline bool operator>=(const Ak3DVector &b) const
AkForceInline bool operator!=(const Ak2DVector &b) const
AkForceInline bool IsAllPositive() const
AkForceInline AkReal32 LengthSquared() const
AkForceInline AkReal32 Length() const
Ak3DVector GetSide() const
Ak2DVector(AkReal32 x, AkReal32 y)
AkForceInline AkMatrix3x3 & operator*=(const AkReal32 &in_f)
AkReal32 GetVolume() const
AkForceInline Ak3DVector operator*(const AkReal32 f) const
AkForceInline bool operator>(const Ak3DVector b) const
Ak2DVector operator-(const Ak2DVector &b) const
AkReal32 m_Data[MAX_SIZE]
AkForceInline AkReal32 ACos(AkReal32 in_fAngle) const
AkBoundingBox Intersect(const AkBoundingBox &in_BB) const
Ak3DVector(AkReal32 x, AkReal32 y, AkReal32 z)
static AkForceInline void OuterProduct(AkMatrix3x3 &out_mat, const Ak3DVector &in_v0, const Ak3DVector &in_v1)
Ak3DVector(const AkVector &b)
Ak3DVector GetFront() const
Ak4DVector operator=(const Ak4DVector &b)
AkForceInline bool IsWithin(const AkBoundingBox &in_BB) const
AkMatrix4x4 operator/=(const AkReal32 f)
AkForceInline bool operator!=(const Ak3DVector &b) const
static AkForceInline void Add(AkMatrix3x3 &out_res, const AkMatrix3x3 &in_m0, const AkMatrix3x3 &in_m1)
AkForceInline bool IsEmpty() const
AkMatrix3x3 operator/=(const AkReal32 f)
AkForceInline Ak3DVector SphericalToCartesian(const AkReal32 azimuth, const AkReal32 elevation)
AkForceInline AkReal32 & operator()(const AkUInt32 row, const AkUInt32 column)
void Update(const Ak3DVector &in_point)
AkQuaternion(AkReal32 in_angle, const Ak3DVector &in_axis)
AkLine(Ak3DVector in_L, Ak3DVector in_P)
static AkReal32 Determinant(const Ak3DVector &a, const Ak3DVector &b, const Ak3DVector &c)
static AkForceInline void CrossProductMatrix(AkMatrix3x3 &out_mat, const Ak3DVector &in_u)
bool DoesRayIntersect(const Ak3DVector &in_Origin, const Ak3DVector &in_Destination, Ak3DVector &out_Intersection) const
AkForceInline bool IsAllPositive() const
AkForceInline AkReal32 L2_Norm() const
AkForceInline AKSIMD_V4F32 PointV4F32() const
AkForceInline const AkQuaternion & Normalize()
AkForceInline Ak2DVector NormalizeSpherical() const
AkForceInline Ak3DVector operator/(const AkReal32 f) const
AkQuaternion(const Ak3DVector &in_fromVector)
AkForceInline void NormalizeSpherical()
static AkForceInline void Rotation(AkMatrix3x3 &out_mat, AkReal32 in_angle, const Ak3DVector &in_axis)
static AkForceInline Ak3DVector Max(const Ak3DVector &A, const Ak3DVector &B)
void Init(const Ak3DVector &in_center, const Ak3DVector &in_extent, const Ak3DVector &in_Front, const Ak3DVector &in_Up)
AkForceInline AkMatrix3x3 & operator+=(const AkMatrix3x3 &in_rhs)
AkForceInline const AkReal32 & operator()(const AkUInt32 row, const AkUInt32 column) const
AkForceInline Ak3DVector operator/=(const AkReal32 f)
AkForceInline bool operator<=(const Ak3DVector &b) const
AkPlane(Ak3DVector in_p1, Ak3DVector in_p2, Ak3DVector in_p4)
AkQuaternion(const Ak3DVector &in_v0, const Ak3DVector &in_v1)
AkForceInline Ak3DVector operator+(const AkReal32 f) const
Ak3DVector GetSize() const
AkForceInline AkReal32 Dot(const Ak3DVector &v2) const
AkForceInline const Ak3DVector & Normalize()
AkForceInline Ak3DVector operator=(const Ak3DVector &b)
static AkForceInline Ak3DVector Min(const Ak3DVector &A, const Ak3DVector &B)
void SetReflection(AkReal32 *out_mat) const
Ak4DVector(const AkVector &b)
AkForceInline bool IsWithin(const Ak3DVector &in_Point) const
AkForceInline Ak2DVector operator=(const AkSphericalCoord &b)
Ak2DVector operator/=(const AkReal32 f)
AkForceInline Ak2DVector LinearCombination(const Ak2DVector &A, const Ak2DVector &B) const
AkQuaternion(AkReal32 in_W, AkReal32 in_X, AkReal32 in_Y, AkReal32 in_Z)
AkForceInline Ak3DVector Abs() const
AkForceInline Ak3DVector operator*(const Ak3DVector v2) const
AkForceInline Ak3DVector LinearCombination(const Ak3DVector &A, const Ak3DVector &B, const Ak3DVector &C) const
지원이 필요하신가요?
질문이 있으신가요? 문제를 겪고 계신가요? 더 많은 정보가 필요하신가요? 저희에게 문의해주시면 도와드리겠습니다!
지원 페이지를 방문해 주세요
작업하는 프로젝트에 대해 알려주세요. 언제든지 도와드릴 준비가 되어 있습니다.
프로젝트를 등록하세요. 아무런 조건이나 의무 사항 없이 빠른 시작을 도와드리겠습니다.
Wwise를 시작해 보세요