我正在寻找一种操纵一堆物品的方法,通常一个技巧是制作团体,将物品作为一个群体的孩子。但在我的情况下,它无法正常工作。
我想要做的是将几何体及其线框绑定在一起,以便我可以将它们一起操作。在立方体的情况下,我使用了BoxGeometry和BoxHelper。我用BoxGeometry创建了一个网格,并创建了网格的BoxHelper。然后我想翻译/旋转/缩放这个包。
我做了:geometry.applyMatrix(new THREE.Matrix4()。makeTranslation(x,y,z)); 我将这个几何图形添加到父版本中。
但我注意到父和网格位置是(0,0,0),BoxHelper位置也是(0,0,0)。为什么值不随几何顶点一起变化? Object3D / Mesh / geometry的位置是否与其父级或世界空间相对位置?
我尝试将矩阵应用于父级。结果是,网格处于正确的位置,但框架是远离的。有谁能解释一下?谢谢。
var newcube = new THREE.BoxGeometry(20, 20, 20);
// newcube.applyMatrix( new THREE.Matrix4().makeTranslation(x, y, z);
var mats = [];
mats.push(new THREE.MeshBasicMaterial({ color: 0xffd500 }));
mats.push(new THREE.MeshBasicMaterial({ color: 0x009e60 }));
mats.push(new THREE.MeshBasicMaterial({ color: 0x0051ba }));
mats.push(new THREE.MeshBasicMaterial({ color: 0xffffff }));
mats.push(new THREE.MeshBasicMaterial({ color: "yellow" })); // backward
mats.push(new THREE.MeshBasicMaterial({ color: 0xC41E3A }));
var faceMaterial = new THREE.MeshFaceMaterial(mats);
var parent = new THREE.Object3D();
var mesh = new THREE.Mesh(newcube, faceMaterial);
parent.add(mesh);
var cubeframe = new THREE.BoxHelper( mesh );
cubeframe.material.color.set( 0x0066ff );
parent.add( cubeframe );
parent.applyMatrix( new THREE.Matrix4().makeTranslation(x, y, z);
scene.add(parent);
objects.push(parent);