Temporarily disable dual quaternions.

The animation data isn't getting loaded or used properly (not sure yet).
This helps ensure it's not something I've done wrong with dual quats.
This commit is contained in:
Bill Currie 2012-05-12 19:14:07 +09:00
parent 4b38048a5c
commit 7cda91a879
3 changed files with 16 additions and 2 deletions

View file

@ -461,10 +461,12 @@ load_iqm_anims (model_t *mod, const iqmheader *hdr, byte *buffer)
Mat4Init (rotation, scale, translation, mat);
if (p->parent >= 0)
Mat4Mult (iqm->baseframe[p->parent], mat, mat);
#if 0
Mat4Mult (mat, iqm->inverse_baseframe[j], mat);
// convert the matrix to dual quaternion + shear + scale
Mat4Decompose (mat, frame->rt.q0.q, frame->shear, frame->scale,
frame->rt.qe.sv.v);
frame->rt.qe.sv.s = 0;
// apply the inverse of scale and shear to translation so
// everything works out properly in the shader.
// Normally v' = T*Sc*Sh*R*v, but with the dual quaternion, we get
@ -473,9 +475,11 @@ load_iqm_anims (model_t *mod, const iqmheader *hdr, byte *buffer)
VectorUnshear (frame->shear, frame->rt.qe.sv.v, frame->rt.qe.sv.v);
// Dual quaternions need 1/2 translation.
VectorScale (frame->rt.qe.sv.v, 0.5, frame->rt.qe.sv.v);
frame->rt.qe.sv.s = 0;
// and tranlation * rotation
QuatMult (frame->rt.qe.q, frame->rt.q0.q, frame->rt.qe.q);
#else
Mat4Mult (mat, iqm->inverse_baseframe[j], (float *)frame);
#endif
}
}
return true;

View file

@ -211,7 +211,7 @@ glsl_R_DrawIQM (void)
Mat4Mult (iqm_vp, ent->transform, mvp_mat);
blend = R_IQMGetLerpedFrames (ent, iqm);
#if 0
frame = Hunk_TempAlloc (iqm->num_joints * sizeof (iqmframe_t));
for (i = 0; i < iqm->num_joints; i++) {
iqmframe_t *f1 = &iqm->frames[ent->pose1][i];
@ -220,6 +220,10 @@ glsl_R_DrawIQM (void)
QuatBlend (f1->shear, f2->shear, blend, frame[i].shear);
QuatBlend (f1->scale, f2->scale, blend, frame[i].scale);
}
#else
blend = blend;
frame = iqm->frames[ent->pose1];
#endif
for (i = 0; i < MAX_IQM_LIGHTS; i++) {
quat_t val;

View file

@ -45,6 +45,7 @@ main (void)
m += bonemats[int (vbones.y)] * vweights.y;
m += bonemats[int (vbones.z)] * vweights.z;
m += bonemats[int (vbones.w)] * vweights.w;
#if 0
q0 = m[0].yzwx; //swizzle for conversion betwen QF and GL
qe = m[1].yzwx; //swizzle for conversion betwen QF and GL
sh = m[2].xyz;
@ -65,6 +66,11 @@ main (void)
// rotate tangent (won't bother with shear or scale: not super accurate,
// but probably good enough)
t = qmult (q0, vtangent.xyz);
#else
v = (m * vec4 (vposition, 1.0)).xyz;
n = (m * vec4 (vnormal, 1.0)).xyz;
t = (m * vec4 (vtangent.xyz, 1.0)).xyz;
#endif
position = v * 8.0;
normal = norm_mat * n;
tangent = norm_mat * t;