mirror of
https://git.code.sf.net/p/quake/quakeforge
synced 2025-03-20 01:11:18 +00:00
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:
parent
4b38048a5c
commit
7cda91a879
3 changed files with 16 additions and 2 deletions
|
@ -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;
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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;
|
||||
|
|
Loading…
Reference in a new issue