22 void update(
float gx,
float gy,
float gz,
float ax,
float ay,
float az,
float dt)
25 float halfvx, halfvy, halfvz;
26 float halfex, halfey, halfez;
30 if (!((ax == 0.0f) && (ay == 0.0f) && (az == 0.0f)))
34 recipNorm = invSqrt(ax * ax + ay * ay + az * az);
41 halfvx =
q[1] *
q[3] -
q[0] *
q[2];
42 halfvy =
q[0] *
q[1] +
q[2] *
q[3];
43 halfvz =
q[0] *
q[0] - 0.5f +
q[3] *
q[3];
46 halfex = (ay * halfvz - az * halfvy);
47 halfey = (az * halfvx - ax * halfvz);
48 halfez = (ax * halfvy - ay * halfvx);
53 integralFBx += ki * halfex * dt;
54 integralFBy += ki * halfey * dt;
55 integralFBz += ki * halfez * dt;
76 q[0] += (-qb * gx - qc * gy -
q[3] * gz);
77 q[1] += (qa * gx + qc * gz -
q[3] * gy);
78 q[2] += (qa * gy - qb * gz +
q[3] * gx);
79 q[3] += (qa * gz + qb * gy - qc * gx);
82 recipNorm = invSqrt(
q[0] *
q[0] +
q[1] *
q[1] +
q[2] *
q[2] +
q[3] *
q[3]);