129#define Point2fT Tuple2fT
131#define Quat4fT Tuple4fT
133#define Vector3fT Tuple3fT
136#define FuncSqrt sqrtf
140# define Epsilon 1.0e-5
152 return (
Vector3fT){.X = v1.Y * v2.Z - v1.Z * v2.Y,
153 .Y = v1.Z * v2.X - v1.X * v2.Z,
154 .Z = v1.X * v2.Y - v1.Y * v2.X};
163 return NewObj.X * v1.X + NewObj.Y * v1.Y + NewObj.Z * v1.Z;
171static float Vector3fLengthSquared(
Vector3fT NewObj) {
172 return NewObj.X * NewObj.X + NewObj.Y * NewObj.Y + NewObj.Z * NewObj.Z;
180static float Vector3fLength(
Vector3fT NewObj) {
181 return FuncSqrt(Vector3fLengthSquared(NewObj));
199 n = q1.X * q1.X + q1.Y * q1.Y + q1.Z * q1.Z + q1.W * q1.W;
200 s = (n > 0.0f) ? (2.0f / n) : 0.0f;
215 NewObj.
s.
XX = 1.0f - (yy + zz);
216 NewObj.
s.
YX = xy - wz;
217 NewObj.
s.
ZX = xz + wy;
218 NewObj.
s.
XY = xy + wz;
219 NewObj.
s.
YY = 1.0f - (xx + zz);
220 NewObj.
s.
ZY = yz - wx;
221 NewObj.
s.
XZ = xz - wy;
222 NewObj.
s.
YZ = yz + wx;
223 NewObj.
s.
ZZ = 1.0f - (xx + yy);
284 NewObj->
XY * NewObj->
XY +
285 NewObj->
XZ * NewObj->
XZ +
286 NewObj->
YX * NewObj->
YX +
287 NewObj->
YY * NewObj->
YY +
288 NewObj->
YZ * NewObj->
YZ +
289 NewObj->
ZX * NewObj->
ZX +
290 NewObj->
ZY * NewObj->
ZY +
291 NewObj->
ZZ * NewObj->
ZZ) / 3.0f);
295 rot3->
s.
XX = NewObj->
XX;
296 rot3->
s.
XY = NewObj->
XY;
297 rot3->
s.
XZ = NewObj->
XZ;
298 rot3->
s.
YX = NewObj->
YX;
299 rot3->
s.
YY = NewObj->
YY;
300 rot3->
s.
YZ = NewObj->
YZ;
301 rot3->
s.
ZX = NewObj->
ZX;
302 rot3->
s.
ZY = NewObj->
ZY;
303 rot3->
s.
ZZ = NewObj->
ZZ;
308 NewObj->
XY * NewObj->
XY +
309 NewObj->
XZ * NewObj->
XZ);
315 NewObj->
YY * NewObj->
YY +
316 NewObj->
YZ * NewObj->
YZ);
322 NewObj->
ZY * NewObj->
ZY +
323 NewObj->
ZZ * NewObj->
ZZ);
335 NewObj->
XY * NewObj->
XY +
336 NewObj->
XZ * NewObj->
XZ);
342 NewObj->
YY * NewObj->
YY +
343 NewObj->
YZ * NewObj->
YZ);
349 NewObj->
ZY * NewObj->
ZY +
350 NewObj->
ZZ * NewObj->
ZZ);
360static void Matrix4fSetRotationScaleFromMatrix3f(
Matrix4fT * NewObj,
363 assert(NewObj && m1);
365 NewObj->
XX = m1->
s.
XX;
366 NewObj->
YX = m1->
s.
YX;
367 NewObj->
ZX = m1->
s.
ZX;
368 NewObj->
XY = m1->
s.
XY;
369 NewObj->
YY = m1->
s.
YY;
370 NewObj->
ZY = m1->
s.
ZY;
371 NewObj->
XZ = m1->
s.
XZ;
372 NewObj->
YZ = m1->
s.
YZ;
373 NewObj->
ZZ = m1->
s.
ZZ;
377static void Matrix4fMulRotationScale(
Matrix4fT * NewObj,
float scale)
403static void Matrix4fSetRotationFromMatrix3f(
Matrix4fT * NewObj,
408 assert(NewObj && m1);
412 Matrix4fSetRotationScaleFromMatrix3f(NewObj, m1);
413 Matrix4fMulRotationScale(NewObj,
scale);
ArcBall_t init_arcBall(float NewWidth, float NewHeight)
#define X(prefix, name, str, type, subtype,...)
static WUR pointf scale(double c, pointf p)