4 #include "Bullet3Common/shared/b3PlatformDefinitions.h"
5 #include "Bullet3Common/shared/b3Float4.h"
8 #include "Bullet3Common/b3Quaternion.h"
9 #include "Bullet3Common/b3Transform.h"
11 #define b3Quat b3Quaternion
12 #define b3QuatConstArg const b3Quaternion&
13 inline b3Quat b3QuatInverse(b3QuatConstArg orn)
18 inline b3Float4 b3TransformPoint(b3Float4ConstArg point, b3Float4ConstArg translation, b3QuatConstArg orientation)
21 tr.setOrigin(translation);
22 tr.setRotation(orientation);
27 typedef float4 b3Quat;
28 #define b3QuatConstArg const b3Quat
30 inline float4 b3FastNormalize4(float4 v)
32 v = (float4)(v.xyz, 0.f);
33 return fast_normalize(v);
36 inline b3Quat b3QuatMul(b3Quat a, b3Quat b);
37 inline b3Quat b3QuatNormalized(b3QuatConstArg in);
38 inline b3Quat b3QuatRotate(b3QuatConstArg q, b3QuatConstArg vec);
39 inline b3Quat b3QuatInvert(b3QuatConstArg q);
40 inline b3Quat b3QuatInverse(b3QuatConstArg q);
42 inline b3Quat b3QuatMul(b3QuatConstArg a, b3QuatConstArg b)
46 ans += a.w * b + b.w * a;
47 // ans.w = a.w*b.w - (a.x*b.x+a.y*b.y+a.z*b.z);
48 ans.w = a.w * b.w - b3Dot3F4(a, b);
52 inline b3Quat b3QuatNormalized(b3QuatConstArg in)
56 //return b3FastNormalize4(in);
57 float len = native_sqrt(dot(q, q));
64 q.x = q.y = q.z = 0.f;
69 inline float4 b3QuatRotate(b3QuatConstArg q, b3QuatConstArg vec)
71 b3Quat qInv = b3QuatInvert(q);
74 float4 out = b3QuatMul(b3QuatMul(q, vcpy), qInv);
78 inline b3Quat b3QuatInverse(b3QuatConstArg q)
80 return (b3Quat)(-q.xyz, q.w);
83 inline b3Quat b3QuatInvert(b3QuatConstArg q)
85 return (b3Quat)(-q.xyz, q.w);
88 inline float4 b3QuatInvRotate(b3QuatConstArg q, b3QuatConstArg vec)
90 return b3QuatRotate(b3QuatInvert(q), vec);
93 inline b3Float4 b3TransformPoint(b3Float4ConstArg point, b3Float4ConstArg translation, b3QuatConstArg orientation)
95 return b3QuatRotate(orientation, point) + (translation);