[util] Add q-v and v-q multiplication to cexpr

This commit is contained in:
Bill Currie 2021-01-02 12:10:58 +09:00
parent 015cee7b6f
commit eb52d366c8

View file

@ -356,6 +356,16 @@ BINOP(vector, sub, vec4f_t, -)
BINOP(vector, mul, vec4f_t, *)
BINOP(vector, div, vec4f_t, /)
static void
vector_quaternion_mul (const exprval_t *val1, const exprval_t *val2,
exprval_t *result, exprctx_t *ctx)
{
vec4f_t a = *(vec4f_t *) val1->value;
vec4f_t b = *(vec4f_t *) val2->value;
__auto_type c = (vec4f_t *) result->value;
*c = vqmulf (a, b);
}
static void
vector_rem (const exprval_t *val1, const exprval_t *val2, exprval_t *result,
exprctx_t *ctx)
@ -396,6 +406,7 @@ binop_t vector_binops[] = {
{ '+', &cexpr_vector, &cexpr_vector, vector_add },
{ '-', &cexpr_vector, &cexpr_vector, vector_sub },
{ '*', &cexpr_vector, &cexpr_vector, vector_mul },
{ '*', &cexpr_quaternion, &cexpr_vector, vector_quaternion_mul },
{ '/', &cexpr_vector, &cexpr_vector, vector_div },
{ '%', &cexpr_vector, &cexpr_vector, vector_rem },
{ MOD, &cexpr_vector, &cexpr_vector, vector_mod },
@ -426,10 +437,21 @@ quaternion_mul (const exprval_t *val1, const exprval_t *val2,
*c = qmulf (a, b);
}
static void
quaternion_vector_mul (const exprval_t *val1, const exprval_t *val2,
exprval_t *result, exprctx_t *ctx)
{
vec4f_t a = *(vec4f_t *) val1->value;
vec4f_t b = *(vec4f_t *) val2->value;
__auto_type c = (vec4f_t *) result->value;
*c = qvmulf (a, b);
}
binop_t quaternion_binops[] = {
{ '+', &cexpr_quaternion, &cexpr_quaternion, vector_add },
{ '-', &cexpr_quaternion, &cexpr_quaternion, vector_sub },
{ '*', &cexpr_quaternion, &cexpr_quaternion, quaternion_mul },
{ '*', &cexpr_vector, &cexpr_vector, quaternion_vector_mul },
{}
};