【问题标题】:How to rotate Object3D in three.js around own center by TransformControls如何通过 TransformControls 在三个.js 中围绕自己的中心旋转 Object3D
【发布时间】:2021-05-06 21:46:48
【问题描述】:

我想将Object3D(它的网格组)旋转TransformControls
所以我将TransformControls附加到Object3D,并将TransformControls的位置设置为Object3D的中心。

这是试用过的代码:

let transformControl = new THREE.TransformControls(viewer.camera, viewer.canvas);
transformControl.setMode("rotate");
transformControl.setSpace("local");

let meshGroup = new THREE.Group();

// here I added lot of mesh to meshGroup.
............ 

let bbox = new THREE.Box3();
bbox.setFromObject(meshGroup);
let center = new THREE.Vector3(0,0,0);
center = bbox.getCenter(center);
center.sub(meshGroup.position);
transformControl.position.set(center.x, center.y, center.z);
transformControl.attach(meshGroup);

但是当我尝试使用 TransformControls 旋转时,Object3D 围绕世界轴而不是他自己的中心旋转。
我该如何解决?
请任何人帮助。

PS:我不想移动meshGroup的位置。

【问题讨论】:

    标签: three.js rotation transform


    【解决方案1】:

    我遇到了同样的问题,我通过移动对象位置解决了居中问题。

    看看下面的stackblitz。我在不知道您使用什么框架/库的情况下创建了这个示例,但我是用打字稿制作的。

    【讨论】:

    • 我用你的方法试过了。但这对我不起作用。因为网格的位置与原始位置不同。有没有不改变网格位置的方法?
    • 请发布解决方案的相关部分作为您的答案。 Links should never be the only piece of information in your answer
    • 我阅读了 TransformControls 的源代码,在我看来你不能执行这样的操作,因为有一个内部变量使网格只能从他的原点旋转而不允许你设置任何外部偏移量或类似的.我想您需要考虑使用偏移量。就我而言,我在从本地配置加载坐标后应用偏移量。
    • 我赞成您的回答,您能否更改 TransformControls 以旋转他自己的中心?
    • 对修复 TransformControls 有什么建议吗?如果需要,我会更改 TransformControls 的代码。
    猜你喜欢
    • 1970-01-01
    • 2013-07-28
    • 2014-03-05
    • 2012-02-05
    • 2019-10-22
    • 2013-02-14
    • 2015-06-15
    • 2020-09-01
    • 2017-01-14
    相关资源
    最近更新 更多