Exemplo n.º 1
0
GLUSboolean GLUSAPIENTRY glusQuaternionSlerpf(GLUSfloat result[4], const GLUSfloat quaternion0[4], const GLUSfloat quaternion1[4], const GLUSfloat t)
{
    GLUSint i;

    GLUSfloat cosAlpha = quaternion0[0] * quaternion1[0] + quaternion0[1] * quaternion1[1] + quaternion0[2] * quaternion1[2] + quaternion0[3] * quaternion1[3];

    GLUSfloat alpha = acosf(glusMathClampf(cosAlpha, -1.0f, 1.0f));

    GLUSfloat sinAlpha = sinf(alpha);

    GLUSfloat a;
    GLUSfloat b;

    if (sinAlpha == 0.0f)
    {
    	glusQuaternionCopyf(result, quaternion0);

    	return GLUS_FALSE;
    }

    a = sinf(alpha * (1.0f - t)) / sinAlpha;

    b = sinf(alpha * t) / sinAlpha;

    for (i = 0; i < 4; i++)
    {
        result[i] = a * quaternion0[i] + b * quaternion1[i];
    }

    return GLUS_TRUE;
}
Exemplo n.º 2
0
GLUSvoid GLUSAPIENTRY glusQuaternionMultiplyQuaternionf(GLUSfloat result[4], const GLUSfloat quaternion0[4], const GLUSfloat quaternion1[4])
{
    GLUSfloat temp[4];

    temp[0] = quaternion0[3] * quaternion1[0] + quaternion0[0] * quaternion1[3] + quaternion0[1] * quaternion1[2] - quaternion0[2] * quaternion1[1];
    temp[1] = quaternion0[3] * quaternion1[1] - quaternion0[0] * quaternion1[2] + quaternion0[1] * quaternion1[3] + quaternion0[2] * quaternion1[0];
    temp[2] = quaternion0[3] * quaternion1[2] + quaternion0[0] * quaternion1[1] - quaternion0[1] * quaternion1[0] + quaternion0[2] * quaternion1[3];
    temp[3] = quaternion0[3] * quaternion1[3] - quaternion0[0] * quaternion1[0] - quaternion0[1] * quaternion1[1] - quaternion0[2] * quaternion1[2];

    glusQuaternionCopyf(result, temp);
}