compose 3x3 matrix from rotation/scale
| 1516 | |
| 1517 | //! compose 3x3 matrix from rotation/scale |
| 1518 | VECTORCALL VECMATH_FINLINE void v_mat33_compose(mat33f &dest, quat4f rot, vec4f scale) |
| 1519 | { |
| 1520 | vec4f xyzw_2, wwww, yzxw, zxyw, yzxw_2, zxyw_2; |
| 1521 | vec4f tmp0, tmp1, tmp2, tmp3, tmp4, tmp5; |
| 1522 | |
| 1523 | xyzw_2 = v_add(rot, rot); |
| 1524 | wwww = v_splat_w(rot); |
| 1525 | yzxw = v_perm_yzxw(rot); yzxw_2 = v_perm_yzxw(xyzw_2); |
| 1526 | zxyw = v_perm_zxyw(rot); zxyw_2 = v_perm_zxyw(xyzw_2); |
| 1527 | tmp0 = v_mul(yzxw_2, wwww); |
| 1528 | tmp1 = v_nmsub(yzxw, yzxw_2, V_C_ONE); |
| 1529 | tmp2 = v_mul(yzxw, xyzw_2); |
| 1530 | tmp0 = v_madd(zxyw, xyzw_2, tmp0); |
| 1531 | tmp1 = v_nmsub(zxyw, zxyw_2, tmp1); |
| 1532 | tmp2 = v_nmsub(zxyw_2, wwww, tmp2); |
| 1533 | tmp3 = v_perm_ayzw(tmp0, tmp1); |
| 1534 | tmp4 = v_perm_ayzw(tmp1, tmp2); |
| 1535 | tmp5 = v_perm_ayzw(tmp2, tmp0); |
| 1536 | dest.col0 = v_mul(v_perm_xycw(tmp3, tmp2), v_splat_x(scale)); |
| 1537 | dest.col1 = v_mul(v_perm_xycw(tmp4, tmp0), v_splat_y(scale)); |
| 1538 | dest.col2 = v_mul(v_perm_xycw(tmp5, tmp1), v_splat_z(scale)); |
| 1539 | } |
| 1540 | |
| 1541 | //! make 4x4 matrix from quaternion and position |
| 1542 | VECTORCALL VECMATH_FINLINE void v_mat44_from_quat(mat44f &dest, quat4f q, vec4f pos) |
nothing calls this directly
no test coverage detected