Целью следующего кода является использование 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