以下是 MocapApi 技术文档
github https://github.com/pnmocap/MocapApi?tab=readme-ov-file
MocapApi 是 NeuronDataReader(以下简称 NDR)的下一代编程接口,设计目标为:
IMCpxxx
(如 IMCPApplication
)MCPXxxHandle_t
(如 MCPApplicationHandle_t
)语言 | 头文件/模块 | 接口类型 | 句柄类型 |
---|---|---|---|
C++ | MocapApi.h |
IMCpxxx |
MCPXxxHandle_t |
C | MocapCApi.h |
MCPXxx_ProcTable 结构体 |
MCPXxxHandle_t |
C# | MocapApi.cs |
IMCpxxx |
无直接对应,通过接口访问 |
表示与 Axis Studio 广播端口的连接,用于轮询数据和状态。
关键方法:
// 获取接口指针
MocapApi::IMCPApplication* mcpApplication = nullptr;
MocapApi::MCPGetGenericInterface(MocapApi::IMCPApplication_Version,
reinterpret_cast<void**>(&mcpApplication));
// 创建/销毁Application实体
MCPApplicationHandle_t appHandle;
mcpApplication->CreateApplication(&appHandle);
mcpApplication->DestroyApplication(appHandle);
对应 Axis Studio 中的 Avatar 模型,用于获取骨骼层级和关节数据。
关键方法:
// 获取根关节
MCPJointHandle_t rootJoint;
mcpAvatar->GetAvatarRootJoint(&rootJoint, avatarHandle);
// 通过名称获取关节
mcpAvatar->GetAvatarJointByName("LeftKnee", &jointHandle, avatarHandle);
处理关节的本地变换数据(位置/旋转)。
关键方法:
// 获取欧拉角旋转
float rx, ry, rz;
mcpJoint->GetJointLocalRotaionByEuler(&rx, &ry, &rz, jointHandle);
// 获取子关节
MCPJointHandle_t childJoints[10];
uint32_t childCount = 10;
mcpJoint->GetJointChild(childJoints, &childCount, jointHandle);
轮询来自 Axis Studio 的事件(如 Avatar 更新、错误等):
MCPEvent_t events[10];
uint32_t eventCount = 10;
mcpApplication->PollApplicationNextEvent(events, &eventCount, appHandle);
EMCPError
返回(如 Error_None
表示成功)。MCPEvent_Error
)。// BVH旋转顺序
enum EMCPBvhRotation {
BvhRotation_XYZ, BvhRotation_XZY, ..., BvhRotation_ZYX
};
// 坐标系设置
enum EMCPCoordSystem {
CoordSystem_RightHanded, // 右手系
CoordSystem_LeftHanded // 左手系
};
// 命令类型(如开始/结束捕捉)
enum EMCPCommand {
CommandStartCapture, CommandStopCapture, ...
};
CreateXxx
创建的对象需手动调用 DestroyXxx
释放。PollApplicationNextEvent
。IMCPRenderSettings
设置上/前向量和单位(米/厘米)。如需具体代码示例或进一步功能说明,请提供应用场景细节!