Three.DragControl не может обновить локальную позицию объекта - PullRequest
0 голосов
/ 08 марта 2020

Целью следующего кода является использование DragControl. js для перемещения объектов, а также дата. GUI для установки положения и масштаба.

Первая проблема - после перетаскивания объекта с последующим использованием панели . GUI для масштабирования объект ведет себя в зависимости от исходной точки (0,0,0) вместо ее локальных координат. .

Другая проблема в том, что я хочу перемещать объекты только по осям x и z, а не y. Я установил y=0 внутри функции drag(), но она движется очень медленно вдоль оси x.

// initialize
let controls = new THREE.DragControls(objects, camera, renderer.domElement);

//eventListeners
controls.addEventListener('dragstart', dragstart);
controls.addEventListener('dragend', dragend);
controls.addEventListener('drag', drag);

function init() {
    ... 
    objects.push(myModel);
    ...
    // the reason for add listen() is I tried to update current dragged-object postion within drag(), in order to solve the local coordinates issue. It doesn't work 
    /* such as: 
        function drag() {
            GUIPanel.X = -event.object.position.X;
            GUIPanel.Z = -event.object.position.Z;
        }
    */ 
    GUI.add(GUIPanel, 'X', -10, 10).listen();
    GUI.add(GUIPanel, 'Z', -10, 10).listen();
    ...
}

function render() {
    ...
    ...
    objects[currentSelected].scale.set(GUIPanel.Scale,GUIPanel.Scale,GUIPanel.Scale);
    objects[currentSelected].position.x = GUIPanel.X;
    objects[currentSelected].position.z = GUIPanel.Z;
    objects[currentSelected].rotation.setFromVector3 (new THREE.Vector3(0, GUIPanel.RotateY, 0));
    ...
    ...
    requestAnimationFrame(render);
    renderer.render(scene, camera);
}

// control functions
function dragstart(event) {
}
function dragend(event) {
}
function drag(event) {
    // only move objects along x and z axes
    // but movement along z axes is very slow,
    event.object.position.y = 0;
    // I also tried: 
    // event.object.position.z = event.object.position.y*-2;
    // event.object.position.y = 0;
}

Вопрос в том, как использовать дата. GUI масштабирование объекта на основе его локальных координат после перетаскивания объекта с помощью DragControl. js .

Я использовал самые современные библиотеки Three и Three.DragControls. js

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...