//====================================================================================================== // Copyright 2025, Rokoko Glove OptiTrack Integration //====================================================================================================== /** * RokokoData.h defines the data structures for Rokoko Studio LiveFrame_v4 format. * These structures match the JSON format used by Rokoko Unity scripts. */ #pragma once #include #include #include #include namespace RokokoData { // Vector3 structure for position data struct Vector3Frame { float x = 0.0f; float y = 0.0f; float z = 0.0f; }; // Vector4 structure for quaternion rotation data struct Vector4Frame { float x = 0.0f; float y = 0.0f; float z = 0.0f; float w = 1.0f; }; // Actor joint frame containing position and rotation struct ActorJointFrame { Vector3Frame position; Vector4Frame rotation; }; // Body structure containing full skeleton (Unity BodyFrame와 동일) // ✅ OPTIMIZATION: Using std::optional instead of shared_ptr for stack allocation (zero heap allocations) struct Body { // 전신 스켈레톤 데이터 (Unity BodyFrame과 동일) std::optional hip; std::optional spine; std::optional chest; std::optional neck; std::optional head; std::optional leftShoulder; std::optional leftUpperArm; std::optional leftLowerArm; std::optional leftHand; std::optional rightShoulder; std::optional rightUpperArm; std::optional rightLowerArm; std::optional rightHand; // 다리 데이터 (필요시) std::optional leftUpLeg; std::optional leftLeg; std::optional leftFoot; std::optional leftToe; std::optional leftToeEnd; std::optional rightUpLeg; std::optional rightLeg; std::optional rightFoot; std::optional rightToe; std::optional rightToeEnd; // Left hand finger joints std::optional leftThumbProximal; std::optional leftThumbMedial; std::optional leftThumbDistal; std::optional leftThumbTip; std::optional leftIndexProximal; std::optional leftIndexMedial; std::optional leftIndexDistal; std::optional leftIndexTip; std::optional leftMiddleProximal; std::optional leftMiddleMedial; std::optional leftMiddleDistal; std::optional leftMiddleTip; std::optional leftRingProximal; std::optional leftRingMedial; std::optional leftRingDistal; std::optional leftRingTip; std::optional leftLittleProximal; std::optional leftLittleMedial; std::optional leftLittleDistal; std::optional leftLittleTip; // Right hand finger joints (similar structure) std::optional rightThumbProximal; std::optional rightThumbMedial; std::optional rightThumbDistal; std::optional rightThumbTip; std::optional rightIndexProximal; std::optional rightIndexMedial; std::optional rightIndexDistal; std::optional rightIndexTip; std::optional rightMiddleProximal; std::optional rightMiddleMedial; std::optional rightMiddleDistal; std::optional rightMiddleTip; std::optional rightRingProximal; std::optional rightRingMedial; std::optional rightRingDistal; std::optional rightRingTip; std::optional rightLittleProximal; std::optional rightLittleMedial; std::optional rightLittleDistal; std::optional rightLittleTip; }; // Actor data structure struct ActorData { std::string id; std::string name; Body body; }; // Scene structure containing actors struct SceneFrame { std::vector actors; }; // Main LiveFrame_v4 structure struct LiveFrame_v4 { double timestamp = 0.0; SceneFrame scene; }; }