Как реализовать drag and drop в пространстве? Делаю 3d редактор и там нужно как то перетаскивать объекты мышью . Если бы это была плоскость такое можно было бы реализовать без проблем , но надо как то добавить глубину .То есть перемещения как то должны просиходить в 3 осях x,y,z

21 Авг 2019 в 06:28
207 +1
0
Ответы
1

Для реализации drag and drop в 3D пространстве можно воспользоваться библиотекой или фреймворком, который предоставляет возможность работы с трехмерной графикой и интерактивными объектами.

Одним из популярных инструментов для работы с 3D графикой является библиотека Three.js, которая предоставляет широкие возможности по созданию и управлению 3D объектами на веб-странице.

Для реализации drag and drop в 3D пространстве с помощью Three.js, следует создать объекты, которые будут перемещаться, добавить им обработчики событий для захвата и перемещения мышью, а затем изменять их координаты в трехмерном пространстве в зависимости от положения указателя мыши.

Примерно так можно будет организовать drag and drop в 3D пространстве с помощью Three.js:

Создать сцену, камеру и рендерер:var scene = new THREE.Scene();
var camera = new THREE.PerspectiveCamera(75, window.innerWidth / window.innerHeight, 0.1, 1000);
var renderer = new THREE.WebGLRenderer();
renderer.setSize(window.innerWidth, window.innerHeight);
document.body.appendChild(renderer.domElement);Создать геометрию и материал объекта:var geometry = new THREE.BoxGeometry(1, 1, 1);
var material = new THREE.MeshBasicMaterial({color: 0x00ff00});
var cube = new THREE.Mesh(geometry, material);
scene.add(cube);Добавить обработчики событий для drag and drop:var raycaster = new THREE.Raycaster();
var mouse = new THREE.Vector2();
var INTERSECTED;
function onDocumentMouseMove(event) {
event.preventDefault();
mouse.x = (event.clientX / window.innerWidth) * 2 - 1;
mouse.y = - (event.clientY / window.innerHeight) * 2 + 1;
raycaster.setFromCamera(mouse, camera);
if (INTERSECTED) {
var intersects = raycaster.intersectObject(plane);
// Двигать объект в трехмерном пространстве
if (intersects.length > 0) {
INTERSECTED.position.copy(intersects[0].point.sub(offset));
}
return;
}
}
function onDocumentMouseDown(event) {
event.preventDefault();
var intersects = raycaster.intersectObjects(scene.children);
if (intersects.length > 0) {
INTERSECTED = intersects[0].object;
var intersects = raycaster.intersectObject(plane);
offset.copy(intersects[0].point).sub(INTERSECTED.position);
renderer.domElement.addEventListener('mousemove', onDocumentMouseMove, false);
}
}Добавить объект на сцену, который будет принимать перемещения мыши:var plane = new THREE.Mesh(new THREE.PlaneBufferGeometry(2000, 2000, 8, 8), new THREE.MeshBasicMaterial({visible: false}));
scene.add(plane);
var offset = new THREE.Vector3();Обновлять сцену в цикле анимации:function animate() {
requestAnimationFrame(animate);
renderer.render(scene, camera);
}

Это лишь пример реализации drag and drop в 3D пространстве с помощью Three.js, необходимо доработать и дополнить его в соответствии с требованиями вашего 3D редактора.

20 Апр в 13:18
Не можешь разобраться в этой теме?
Обратись за помощью к экспертам
Название заказа не должно быть пустым
Введите email
Бесплатные доработки
Гарантированные бесплатные доработки
Быстрое выполнение
Быстрое выполнение от 2 часов
Проверка работы
Проверка работы на плагиат
Интересные статьи из справочника
Поможем написать учебную работу
Название заказа не должно быть пустым
Введите email
Доверьте свою работу экспертам
Разместите заказ
Наша система отправит ваш заказ на оценку 84 134 авторам
Первые отклики появятся уже в течение 10 минут
Прямой эфир