1

我有一个用 OBJLoader 加载的复杂模型。我想移动和旋转它的中心,让用户(我的应用程序的用户)将中心点放置在他/她想要的位置。我知道这一点:老问题,但对我来说不起作用。这是小提琴中的一个测试:小提琴示例

按下示例中的按钮,我希望中心移动。按钮中的代码是:

objMesh.geometry.applyMatrix(new THREE.Matrix4().makeTranslation(new THREE.Vector3(1, 0.1, 0.1)));
4

2 回答 2

3

我凭经验找到了解决方案,但我不明白它为什么有效。我发布代码以提供帮助,也许有人可以向我解释我的发现。

下面的代码将 x 中的中心移动 0.1 个单位。

var x = 0.1;
var y = 0;
var z = 0;

for (var i = 0; i < object.children.length; i++)
{
    var geometry = object.children[i].geometry;

    object.children[i].centroid.divideScalar(geometry.vertices.length); // Why this line ?

    var offset = object.children[i].centroid.clone(); 
    object.children[i].geometry.applyMatrix(new THREE.Matrix4().makeTranslation(-offset.x+x, -offset.y+y, -offset.z+z));
    object.children[i].position.x -= x;
    object.children[i].position.y -= y;
    object.children[i].position.z -= z;
    object.children[i].geometry.verticesNeedUpdate = true;
}
于 2013-06-07T15:09:55.453 回答
2

利用

mesh.geometry.translate( x, y, z );

或者

mesh.geometry.center();

另外,考虑只调用mesh.position.set(),而不是移动几何的每个顶点。

三.js r.95

于 2013-05-30T18:19:08.633 回答