| 1451 | } |
| 1452 | |
| 1453 | RTC_API void rtcSetGeometryTransformQuaternion(RTCGeometry hgeometry, unsigned int timeStep, const RTCQuaternionDecomposition* qd) |
| 1454 | { |
| 1455 | Geometry* geometry = (Geometry*) hgeometry; |
| 1456 | RTC_CATCH_BEGIN; |
| 1457 | RTC_TRACE(rtcSetGeometryTransformQuaternion); |
| 1458 | RTC_VERIFY_HANDLE(hgeometry); |
| 1459 | RTC_VERIFY_HANDLE(qd); |
| 1460 | |
| 1461 | AffineSpace3fx transform; |
| 1462 | transform.l.vx.x = qd->scale_x; |
| 1463 | transform.l.vy.y = qd->scale_y; |
| 1464 | transform.l.vz.z = qd->scale_z; |
| 1465 | transform.l.vy.x = qd->skew_xy; |
| 1466 | transform.l.vz.x = qd->skew_xz; |
| 1467 | transform.l.vz.y = qd->skew_yz; |
| 1468 | transform.l.vx.y = qd->translation_x; |
| 1469 | transform.l.vx.z = qd->translation_y; |
| 1470 | transform.l.vy.z = qd->translation_z; |
| 1471 | transform.p.x = qd->shift_x; |
| 1472 | transform.p.y = qd->shift_y; |
| 1473 | transform.p.z = qd->shift_z; |
| 1474 | |
| 1475 | // normalize quaternion |
| 1476 | Quaternion3f q(qd->quaternion_r, qd->quaternion_i, qd->quaternion_j, qd->quaternion_k); |
| 1477 | q = normalize(q); |
| 1478 | transform.l.vx.w = q.i; |
| 1479 | transform.l.vy.w = q.j; |
| 1480 | transform.l.vz.w = q.k; |
| 1481 | transform.p.w = q.r; |
| 1482 | |
| 1483 | geometry->setQuaternionDecomposition(transform, timeStep); |
| 1484 | RTC_CATCH_END2(geometry); |
| 1485 | } |
| 1486 | |
| 1487 | RTC_API void rtcGetGeometryTransform(RTCGeometry hgeometry, float time, RTCFormat format, void* xfm) |
| 1488 | { |
no test coverage detected