198#define Point2fT Tuple2fT
200#define Quat4fT Tuple4fT
202#define Vector3fT Tuple3fT
205#define FuncSqrt sqrtf
209# define Epsilon 1.0e-5
225 assert(NewObj && v1 && v2);
230 Result.s.X = (v1->s.Y * v2->s.Z) - (v1->s.Z * v2->s.Y);
231 Result.s.Y = (v1->s.Z * v2->s.X) - (v1->s.X * v2->s.Z);
232 Result.s.Z = (v1->s.X * v2->s.Y) - (v1->s.Y * v2->s.X);
245 assert(NewObj && v1);
247 return (NewObj->s.X * v1->s.X) +
248 (NewObj->s.Y * v1->s.Y) + (NewObj->s.Z * v1->s.Z);
256static float Vector3fLengthSquared(
const Vector3fT * NewObj)
260 return (NewObj->s.X * NewObj->s.X) +
261 (NewObj->s.Y * NewObj->s.Y) + (NewObj->s.Z * NewObj->s.Z);
269static float Vector3fLength(
const Vector3fT * NewObj)
273 return FuncSqrt(Vector3fLengthSquared(NewObj));
283static void Matrix3fSetRotationFromQuat4f(
Matrix3fT * NewObj,
292 assert(NewObj && q1);
294 n = (q1->s.X * q1->s.X) + (q1->s.Y * q1->s.Y) + (q1->s.Z * q1->s.Z) +
296 s = (n > 0.0f) ? (2.0f / n) : 0.0f;
311 NewObj->
s.
XX = 1.0f - (yy + zz);
312 NewObj->
s.
YX = xy - wz;
313 NewObj->
s.
ZX = xz + wy;
314 NewObj->
s.
XY = xy + wz;
315 NewObj->
s.
YY = 1.0f - (xx + zz);
316 NewObj->
s.
ZY = yz - wx;
317 NewObj->
s.
XZ = xz - wy;
318 NewObj->
s.
YZ = yz + wx;
319 NewObj->
s.
ZZ = 1.0f - (xx + yy);
332 assert(NewObj && m1);
370static void Matrix4fSetRotationScaleFromMatrix4f(
Matrix4fT * NewObj,
373 assert(NewObj && m1);
406 (NewObj->
s.
XY * NewObj->
s.
XY) +
407 (NewObj->
s.
XZ * NewObj->
s.
XZ) +
408 (NewObj->
s.
YX * NewObj->
s.
YX) +
409 (NewObj->
s.
YY * NewObj->
s.
YY) +
410 (NewObj->
s.
YZ * NewObj->
s.
YZ) +
411 (NewObj->
s.
ZX * NewObj->
s.
ZX) +
412 (NewObj->
s.
ZY * NewObj->
s.
ZY) +
413 (NewObj->
s.
ZZ * NewObj->
s.
ZZ)) / 3.0f);
417 rot3->
s.
XX = NewObj->
s.
XX;
418 rot3->
s.
XY = NewObj->
s.
XY;
419 rot3->
s.
XZ = NewObj->
s.
XZ;
420 rot3->
s.
YX = NewObj->
s.
YX;
421 rot3->
s.
YY = NewObj->
s.
YY;
422 rot3->
s.
YZ = NewObj->
s.
YZ;
423 rot3->
s.
ZX = NewObj->
s.
ZX;
424 rot3->
s.
ZY = NewObj->
s.
ZY;
425 rot3->
s.
ZZ = NewObj->
s.
ZZ;
430 (NewObj->
s.
XY * NewObj->
s.
XY) +
431 (NewObj->
s.
XZ * NewObj->
s.
XZ));
437 (NewObj->
s.
YY * NewObj->
s.
YY) +
438 (NewObj->
s.
YZ * NewObj->
s.
YZ));
444 (NewObj->
s.
ZY * NewObj->
s.
ZY) +
445 (NewObj->
s.
ZZ * NewObj->
s.
ZZ));
453 if (rot4 != NewObj) {
454 Matrix4fSetRotationScaleFromMatrix4f(rot4, NewObj);
459 (NewObj->
s.
XY * NewObj->
s.
XY) +
460 (NewObj->
s.
XZ * NewObj->
s.
XZ));
466 (NewObj->
s.
YY * NewObj->
s.
YY) +
467 (NewObj->
s.
YZ * NewObj->
s.
YZ));
473 (NewObj->
s.
ZY * NewObj->
s.
ZY) +
474 (NewObj->
s.
ZZ * NewObj->
s.
ZZ));
484static void Matrix4fSetRotationScaleFromMatrix3f(
Matrix4fT * NewObj,
487 assert(NewObj && m1);
501static void Matrix4fMulRotationScale(
Matrix4fT * NewObj,
float scale)
527static void Matrix4fSetRotationFromMatrix3f(
Matrix4fT * NewObj,
532 assert(NewObj && m1);
536 Matrix4fSetRotationScaleFromMatrix3f(NewObj, m1);
537 Matrix4fMulRotationScale(NewObj,
scale);
void init_arcBall(ArcBall_t *a, float NewWidth, float NewHeight)
#define X(prefix, name, str, type, subtype,...)
static pointf scale(double c, pointf p)