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からはじめよう