8 float *boneposerelative;
13 boneposerelative = bonepose +
model->num_bones * 12;
18 weights =
model->surfmesh.data_blendweights;
19 for (
i = 0;
i <
model->surfmesh.num_blends;
i++, weights++)
22 const float *
RESTRICT m = boneposerelative + 12 * (
unsigned int)weights->index[0];
23 float f = weights->influence[0] * (1.0f / 255.0f);
24 b[ 0] =
f*m[ 0];
b[ 1] =
f*m[ 1];
b[ 2] =
f*m[ 2];
b[ 3] =
f*m[ 3];
25 b[ 4] =
f*m[ 4];
b[ 5] =
f*m[ 5];
b[ 6] =
f*m[ 6];
b[ 7] =
f*m[ 7];
26 b[ 8] =
f*m[ 8];
b[ 9] =
f*m[ 9];
b[10] =
f*m[10];
b[11] =
f*m[11];
27 for (k = 1;k < 4 && weights->influence[k];k++)
29 m = boneposerelative + 12 * (
unsigned int)weights->index[k];
30 f = weights->influence[k] * (1.0f / 255.0f);
31 b[ 0] +=
f*m[ 0];
b[ 1] +=
f*m[ 1];
b[ 2] +=
f*m[ 2];
b[ 3] +=
f*m[ 3];
32 b[ 4] +=
f*m[ 4];
b[ 5] +=
f*m[ 5];
b[ 6] +=
f*m[ 6];
b[ 7] +=
f*m[ 7];
33 b[ 8] +=
f*m[ 8];
b[ 9] +=
f*m[ 9];
b[10] +=
f*m[10];
b[11] +=
f*m[11];
37#define LOAD_MATRIX_SCALAR() const float * RESTRICT m = boneposerelative + 12 * (unsigned int)*b
39#define LOAD_MATRIX3() \
41#define LOAD_MATRIX4() \
44#define TRANSFORM_POSITION_SCALAR(in, out) \
45 (out)[0] = ((in)[0] * m[0] + (in)[1] * m[1] + (in)[2] * m[ 2] + m[3]); \
46 (out)[1] = ((in)[0] * m[4] + (in)[1] * m[5] + (in)[2] * m[ 6] + m[7]); \
47 (out)[2] = ((in)[0] * m[8] + (in)[1] * m[9] + (in)[2] * m[10] + m[11]);
48#define TRANSFORM_VECTOR_SCALAR(in, out) \
49 (out)[0] = ((in)[0] * m[0] + (in)[1] * m[1] + (in)[2] * m[ 2]); \
50 (out)[1] = ((in)[0] * m[4] + (in)[1] * m[5] + (in)[2] * m[ 6]); \
51 (out)[2] = ((in)[0] * m[8] + (in)[1] * m[9] + (in)[2] * m[10]);
53#define TRANSFORM_POSITION(in, out) \
54 TRANSFORM_POSITION_SCALAR(in, out)
55#define TRANSFORM_VECTOR(in, out) \
56 TRANSFORM_VECTOR_SCALAR(in, out)
67 if (svector3f && tvector3f)
74 for (
i = 0;
i <
model->surfmesh.num_vertices;
i++,
v += 3,
n += 3, svec += 3, tvec += 3,
b++,
75 vertex3f += 3, normal3f += 3, svector3f += 3, tvector3f += 3)
87 for (
i = 0;
i <
model->surfmesh.num_vertices;
i++,
v += 3,
n += 3,
b++, vertex3f += 3, normal3f += 3)
96 for (
i = 0;
i <
model->surfmesh.num_vertices;
i++,
v += 3,
b++, vertex3f += 3)
108 for (
i = 0;
i <
model->surfmesh.num_vertices;
i++,
n += 3,
b++, normal3f += 3)
117 const float *
RESTRICT svec =
model->surfmesh.data_svector3f;
119 for (
i = 0;
i <
model->surfmesh.num_vertices;
i++, svec += 3,
b++, svector3f += 3)
128 const float *
RESTRICT tvec =
model->surfmesh.data_tvector3f;
130 for (
i = 0;
i <
model->surfmesh.num_vertices;
i++, tvec += 3,
b++, tvector3f += 3)
void Mod_Skeletal_AnimateVertices_Generic(const model_t *RESTRICT model, const frameblend_t *RESTRICT frameblend, const skeleton_t *skeleton, float *RESTRICT vertex3f, float *RESTRICT normal3f, float *RESTRICT svector3f, float *RESTRICT tvector3f)
void Mod_Skeletal_BuildTransforms(const model_t *RESTRICT model, const frameblend_t *RESTRICT frameblend, const skeleton_t *skeleton, float *RESTRICT bonepose, float *RESTRICT boneposerelative)