You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

3ds Max SDK技术问题:如何仅为对象轴心设置变换矩阵

解决3ds Max插件中仅修改对象轴心变换矩阵的问题

在3ds Max SDK中,SetNodeTM会直接修改节点的世界变换矩阵,导致对象和轴心同步移动,无法单独调整轴心。要实现仅修改轴心且保持对象位置不变,需要使用**INode::SetPivotTM**方法,并正确设置参数来维持对象的世界位置。

核心思路

SetPivotTM允许你设置对象轴心的局部变换矩阵,同时通过参数控制是否保持节点的世界变换不变。当第三个参数设为TRUE时,SDK会自动调整对象的局部变换(ObjectTM),抵消轴心变换对对象世界位置的影响,最终仅改变轴心的位置/旋转/缩放,对象本身在场景中的位置保持不变。

代码示例(C++ SDK)

#include <max.h>

// 假设pNode是目标INode指针
// targetPivotTM是要设置的轴心局部变换矩阵(相对于对象自身空间)
TimeValue currentTime = GetCOREInterface()->GetTime();

// 设置新轴心矩阵,同时保持对象世界位置不变
pNode->SetPivotTM(currentTime, targetPivotTM, TRUE);

关键参数说明

  • currentTime:3ds Max基于时间的动画系统,需传入当前帧的时间值
  • targetPivotTM:目标轴心的局部变换矩阵(定义轴心在对象自身空间中的位置、旋转和缩放)
  • TRUE:指定保持节点的世界变换不变,确保对象本身位置不被改变

额外注意事项

  • 如果需要基于世界空间定义轴心位置,需先将世界空间矩阵转换为对象的局部空间矩阵:
    // 将世界空间的轴心矩阵转换为对象局部空间
    Matrix3 nodeWorldTM = pNode->GetNodeTM(currentTime);
    Matrix3 invNodeWorldTM = Inverse(nodeWorldTM);
    Matrix3 targetPivotLocalTM = invNodeWorldTM * targetPivotWorldTM;
    
  • 若要重置轴心到对象中心,可使用pNode->ResetPivot(currentTime)方法

内容的提问来源于stack exchange,提问作者chapaeff

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.09 16:01:17