/* * SPDX-FileCopyrightText: Copyright (c) 2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved. * SPDX-License-Identifier: Apache-2.0 */ #pragma once #include "Math/Transform.h" #include #include namespace Animation { enum IKType { kOneBone, kTwoBone }; Math::Transform JointLocalToGlobal( const std::vector& joint_parents_vec, int32_t index, const std::vector& localPose, const Math::Transform& rootTx = Math::Transform::Identity ); struct ContactInfo { // index IK contact joint: int jointIndex; // mask indicating which frames are in contact: std::vector contactMask; // contact type: IKType contactType = kTwoBone; // Extra info for TwoBoneIK Math::Vector hintOffset = Math::Vector::Zero; float minHeight = 0.0f; }; void CorrectMotion( std::vector< std::vector >& poses, const std::vector< std::vector >& targetPoses, const std::vector& mask, const std::vector& rootMask, const std::vector& contacts, const std::vector& endEffectorPins, const std::vector& joint_parents_vec, const std::vector& defaultPose, float contactThreshold, float root_margin, bool has_double_ankle_joints ); }