При прочтении вашего описания звучит так, будто вы перемещаете объект в пространстве объектов, а не в мировом пространстве.Есть 2 метода, которые могут помочь.Object.localToWorld и .worldToLocal.
Попробуйте преобразовать вектор движения, используя object.worldToLocal (yourMovementVector), прежде чем добавить вектор в object.position?
edit: некоторые отзывы о стиле кодирования:
Старайтесь избегать кода, подобного следующему:
const vertex1 = self.geometry.vertices[1].clone()
if (originalV1 === undefined) {
setOriginalV1(vertex1)
mousePosition = vertex1.add(changedPoint)
} else {
mousePosition = originalV1.clone().add(changedPoint)
}
, который должен быть в функции. Также .clone () - дорогостоящая операция.Кроме того, предварительно инициализируйте originalV1 ... Просто .clone () геометрию один раз, вместо .cloning () каждой из ее вершин.AFAIK, .clone () сделает это за вас.
Вы можете заменить весь этот файл следующим образом:
if(!originalGeometry)originalGeometry = geometry.clone()
for(let i=0;i<geometry.vertices.length;i++)
geometry.vertices[i].copy(originalGeometry.vertices[i]).add(changedPoint);
geometry.needsUpdate = true;
Но также ... вам, вероятно, даже не нужно делать это вычисление вершинвещи ... Просто сделайте набор сверхдлинных кубов, которые простираются до горизонта, и установите свой camera.far на достаточно большой размер, чтобы кубы в перспективе исчезали до этой точки.
Вот пример:
https://codesandbox.io/embed/threejs-simple-template-mousey-cubes-vmx91