diff --git a/src/cmath.rs b/src/cmath.rs index 7fe4c52..e8680a8 100644 --- a/src/cmath.rs +++ b/src/cmath.rs @@ -36,16 +36,25 @@ impl From> for Vec3C { } } - - #[unsafe(no_mangle)] -pub extern "C" fn apply_rot(vec_ptr: *const Vec3C, quat_ptr: *const QuatC) -> Vec3C{ - assert!(!vec_ptr.is_null()); - assert!(!quat_ptr.is_null()); +pub extern "C" fn apply_rot(vec_ptr: *const Vec3C, quat_ptr: *const QuatC) -> Vec3C { + if vec_ptr.is_null() || quat_ptr.is_null() { + return Vec3C { x: 0.0, y: 0.0, z: 0.0 }; + } + unsafe { - let quat: na::UnitQuaternion = std::ptr::read(quat_ptr).into(); - let v: na::Vector3 = std::ptr::read(vec_ptr).into(); - return quat.transform_vector(&v).into(); + let v_raw = &*vec_ptr; + let q_raw = &*quat_ptr; + + let v = na::Vector3::new(v_raw.x, v_raw.y, v_raw.z); + + let q = na::UnitQuaternion::from_quaternion( + na::Quaternion::new(q_raw.w , q_raw.i, q_raw.j, q_raw.k) + ); + + let rotated = q.transform_vector(&v); + + Vec3C { x: rotated.x, y: rotated.y, z: rotated.z } } }