Merge pull request #2770 from TheHX/fix_quat_operator
Implement Quat multiply operator, and bind xform method
This commit is contained in:
commit
0f615c523c
3 changed files with 18 additions and 2 deletions
|
@ -73,7 +73,7 @@ public:
|
||||||
-x * v.x - y * v.y - z * v.z);
|
-x * v.x - y * v.y - z * v.z);
|
||||||
}
|
}
|
||||||
|
|
||||||
_FORCE_INLINE_ Vector3 xform(const Vector3& v) {
|
_FORCE_INLINE_ Vector3 xform(const Vector3& v) const {
|
||||||
|
|
||||||
Quat q = *this * v;
|
Quat q = *this * v;
|
||||||
q *= this->inverse();
|
q *= this->inverse();
|
||||||
|
|
|
@ -409,6 +409,7 @@ static void _call_##m_type##_##m_method(Variant& r_ret,Variant& p_self,const Var
|
||||||
VCALL_LOCALMEM0R(Quat,normalized);
|
VCALL_LOCALMEM0R(Quat,normalized);
|
||||||
VCALL_LOCALMEM0R(Quat,inverse);
|
VCALL_LOCALMEM0R(Quat,inverse);
|
||||||
VCALL_LOCALMEM1R(Quat,dot);
|
VCALL_LOCALMEM1R(Quat,dot);
|
||||||
|
VCALL_LOCALMEM1R(Quat,xform);
|
||||||
VCALL_LOCALMEM2R(Quat,slerp);
|
VCALL_LOCALMEM2R(Quat,slerp);
|
||||||
VCALL_LOCALMEM2R(Quat,slerpni);
|
VCALL_LOCALMEM2R(Quat,slerpni);
|
||||||
VCALL_LOCALMEM4R(Quat,cubic_slerp);
|
VCALL_LOCALMEM4R(Quat,cubic_slerp);
|
||||||
|
@ -1361,6 +1362,7 @@ _VariantCall::addfunc(Variant::m_vtype,Variant::m_ret,_SCS(#m_method),VCALL(m_cl
|
||||||
ADDFUNC0(QUAT,QUAT,Quat,normalized,varray());
|
ADDFUNC0(QUAT,QUAT,Quat,normalized,varray());
|
||||||
ADDFUNC0(QUAT,QUAT,Quat,inverse,varray());
|
ADDFUNC0(QUAT,QUAT,Quat,inverse,varray());
|
||||||
ADDFUNC1(QUAT,REAL,Quat,dot,QUAT,"b",varray());
|
ADDFUNC1(QUAT,REAL,Quat,dot,QUAT,"b",varray());
|
||||||
|
ADDFUNC1(QUAT,VECTOR3,Quat,xform,VECTOR3,"v",varray());
|
||||||
ADDFUNC2(QUAT,QUAT,Quat,slerp,QUAT,"b",REAL,"t",varray());
|
ADDFUNC2(QUAT,QUAT,Quat,slerp,QUAT,"b",REAL,"t",varray());
|
||||||
ADDFUNC2(QUAT,QUAT,Quat,slerpni,QUAT,"b",REAL,"t",varray());
|
ADDFUNC2(QUAT,QUAT,Quat,slerpni,QUAT,"b",REAL,"t",varray());
|
||||||
ADDFUNC4(QUAT,QUAT,Quat,cubic_slerp,QUAT,"b",QUAT,"pre_a",QUAT,"post_b",REAL,"t",varray());
|
ADDFUNC4(QUAT,QUAT,Quat,cubic_slerp,QUAT,"b",QUAT,"pre_a",QUAT,"post_b",REAL,"t",varray());
|
||||||
|
|
|
@ -586,7 +586,21 @@ void Variant::evaluate(const Operator& p_op, const Variant& p_a, const Variant&
|
||||||
} break;
|
} break;
|
||||||
DEFAULT_OP_LOCALMEM_NUM(*,VECTOR3,Vector3);
|
DEFAULT_OP_LOCALMEM_NUM(*,VECTOR3,Vector3);
|
||||||
DEFAULT_OP_FAIL(PLANE);
|
DEFAULT_OP_FAIL(PLANE);
|
||||||
DEFAULT_OP_FAIL(QUAT);
|
case QUAT: {
|
||||||
|
|
||||||
|
switch(p_b.type) {
|
||||||
|
case VECTOR3: {
|
||||||
|
|
||||||
|
_RETURN( reinterpret_cast<const Quat*>(p_a._data._mem)->xform( *(const Vector3*)p_b._data._mem) );
|
||||||
|
} break;
|
||||||
|
case QUAT: {
|
||||||
|
|
||||||
|
_RETURN( *reinterpret_cast<const Quat*>(p_a._data._mem) * *reinterpret_cast<const Quat*>(p_b._data._mem) );
|
||||||
|
} break;
|
||||||
|
};
|
||||||
|
r_valid=false;
|
||||||
|
return;
|
||||||
|
} break;
|
||||||
DEFAULT_OP_FAIL(_AABB);
|
DEFAULT_OP_FAIL(_AABB);
|
||||||
case MATRIX3: {
|
case MATRIX3: {
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue