我正在开发一个项目,我在其中创建3D Widget来旋转,缩放和平移网格。 我目前在定位用于缩放父网格的圆锥时遇到了一些麻烦。 这是我的代码:
function createScaleWidget(mesh, constScale){
var bbox = new THREE.Box3().setFromObject(mesh);
var material = new THREE.MeshBasicMaterial({
color: 0x0000ff
});
var coneGeom = new THREE.CylinderGeometry(0, constScale, 10, 50, 20, false);
var cone = new THREE.Mesh(coneGeom,material);
cone.position.y = bbox.max.y/2; //assuming all the objects are laid on the ground
cone.position.z = bbox.max.z+10;
cone.position.x = bbox.max.x+10;
mesh.add(cone);
}
mesh 是我正在为其创建窗口小部件的网格, cone 是小部件。 我想让锥体在网格中间(相对于y) 并且相对于边界框成一个角度(理想的是将它放在面向摄像机的面部边界框的右侧)。 可能我的问题是由于圆锥是网格的孩子,因此最终位置不仅取决于bbox而且取决于 mesh 本身。
答案 0 :(得分:1)
我想你想要这样的东西:
你是对的,你必须相对于它的父位置定位锥体,在这种情况下 - 网格:
function createScaleWidget(mesh, constScale){
var bbox = new THREE.Box3().setFromObject(mesh);
var material = new THREE.MeshBasicMaterial({
color: 0x0000ff
});
var coneGeom = new THREE.CylinderGeometry(0, constScale, 10, 50, 20, false);
var cone = new THREE.Mesh(coneGeom,material);
cone.position.y = bbox.size().y / 2;
mesh.add(cone);
}
当我做了类似的事情时,这对我有用。锥体应放在其中一个面的旁边。尝试另一张脸,然后你可以尝试:
cone.position.z = bbox.size().z / 2;
代替。