Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/370.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 三点控制错误的位置_Javascript_Three.js - Fatal编程技术网

Javascript 三点控制错误的位置

Javascript 三点控制错误的位置,javascript,three.js,Javascript,Three.js,我使用以下代码创建一个框: let v = [ new THREE.Vector3(-100,30,10), new THREE.Vector3(-100,30,-10), new THREE.Vector3(-100,-10,10), new THREE.Vector3(-100,-10,-10), new THREE.Vector3(-110,30,-10),

我使用以下代码创建一个框:

let v = [
            new THREE.Vector3(-100,30,10),
            new THREE.Vector3(-100,30,-10),
            new THREE.Vector3(-100,-10,10),
            new THREE.Vector3(-100,-10,-10),
            new THREE.Vector3(-110,30,-10),
            new THREE.Vector3(-110,30,10),
            new THREE.Vector3(-110,-10,-10),
            new THREE.Vector3(-110,-10,10)
        ];
        let f = [
            new THREE.Face3(0,2,1),
            new THREE.Face3(2,3,1),
            new THREE.Face3(4,6,5),
            new THREE.Face3(6,7,5),
            new THREE.Face3(4,5,1),
            new THREE.Face3(5,0,1),
            new THREE.Face3(7,6,2),
            new THREE.Face3(6,3,2),
            new THREE.Face3(5,7,0),
            new THREE.Face3(7,2,0),
            new THREE.Face3(1,3,4),
            new THREE.Face3(3,6,4)
        ];
        let g = new THREE.Geometry();
        g.mergeVertices();
        g.vertices = v;g.faces = f;
        let m = new THREE.MeshBasicMaterial({color:0xff0000,side:THREE.DoubleSide});
        let mesh = new THREE.Mesh(g,m);
        scene.add(mesh);
然后我使用了三个.transformControls,但它没有出现在网格上,并且始终位于场景的中心


如果我需要设置盒子的矩阵什么的

在这种情况下,最好平移网格,而不是其几何体

let v = [
  new THREE.Vector3(5, 30, 10),
  new THREE.Vector3(5, 30, -10),
  new THREE.Vector3(5, -10, 10),
  new THREE.Vector3(5, -10, -10),
  new THREE.Vector3(-5, 30, -10),
  new THREE.Vector3(-5, 30, 10),
  new THREE.Vector3(-5, -10, -10),
  new THREE.Vector3(-5, -10, 10)
];
然后你只需要平移网格

mesh.position.x = -105;
UPD如果无法在创建时更改顶点坐标,则可以找到几何体的质心,然后使用
.center()
方法,然后将网格平移到先前找到的质心位置

g.computeBoundingBox();
var centroid = new THREE.Vector3();
centroid.addVectors(g.boundingBox.min, g.boundingBox.max).divideScalar(2);
g.center();

...
mesh.position.copy(centroid);

示例r87

谢谢你的回答,我已经尝试了你的代码,transformControls辅助对象在框中。但同样的问题是,框的位置发生了变化,它移动到了场景的中心,但这不是我想要的。我想问题是,当我创建网格时,无论它的顶点是什么,它的位置都是(0,0,0),而transformControls将出现在网格的位置。但正如我们注意到的顶点,网格的正确位置不是(0,0,0),因此我们将看到网格不在“transformControls位置(0,0,0)”。是的,正确。但看起来,你们混淆了网格的位置和它的几何体中顶点的坐标。第一个与其父对象(场景或其他对象)的坐标系相关,第二个与网格本身的局部坐标系相关。