如何调整QtQuick3D View3D中导入模型的旋转轴?
解决方案
临时修复:通过父子节点层级调整旋转中心
QtQuick3D中所有变换(旋转、缩放)都是基于节点的本地坐标系原点。你的骰子模型枢轴偏移,最快的解决方式是用一个父Node包裹Model:
- 将
Model的position设置为反向偏移值(比如你的Z轴偏移了10,就设z: -10),把模型拉回父节点的原点; - 所有旋转动画直接作用在父
Node上,此时旋转中心就是模型的几何中心。
修改后的核心代码片段:
Node { id: diceRoot // 父节点,用来做旋转操作 position: Qt.vector3d(20, 20, 20) // 原来Model的位置移到父节点 Model { id: _diceModel source: "/assets/assets/dice_001.mesh" materials: [_priDiceMaterial] eulerRotation: Qt.vector3d(0, 0, 0) position: Qt.vector3d(0, 0, -10) // 抵消Z轴的枢轴偏移 AxisHelper {} } }
之后给diceRoot添加旋转动画即可,示例:
NumberAnimation on eulerRotation.y { from: 0 to: 360 duration: 2000 loops: Animation.Infinite }
从源头上解决:调整导入设置
Balsam Asset Import Tool中,取消勾选fbxPreservePivots选项,同时勾选将枢轴重置到几何中心的相关选项(不同版本可能叫Center Mesh或Reset Pivot to Bounding Box Center)。这样导入后的.mesh文件会自动把旋转轴设置在模型中心,无需手动调整偏移。
关于模型文件的说明
- FBX格式确实会存储模型的**枢轴(Pivot)**信息,也就是旋转/缩放的中心点,这个信息会被导入工具继承到
.mesh文件中; - 如果原FBX模型的枢轴不在几何中心,导入后的
.mesh也会保留这个偏移,这就是你看到旋转轴偏离的原因。
内容的提问来源于stack exchange,提问作者fever
相关产品推荐
相关产品推荐

