我正在处理这个项目的最后一段时间,我一直在处理,并且遇到了单击和拖动对象的能力问题。我已经将它们全部添加到一个名为items的数组中,并且它现在可以工作。 Here是到实际页面的链接。如果您从右上角的菜单中添加任何项目,它将显示,但您只能一个一个地拖动它。从我所知道的问题来看,问题在于它将每件商品视为一系列商品而不是一件商品。这是有道理的,因为每个模型都是几个模型拼凑在一起的,但我不知道如何解决这个问题。有任何想法吗?单击并拖动只抓取对象的一部分
这里有三个功能我已经控制鼠标交互:
function onMouseMove(event){
event.preventDefault();
mouse.x = (event.clientX/width) * 2 - 1;
mouse.y = - (event.clientY/height) * 2 + 1;
var vector = new THREE.Vector3(mouse.x, mouse.y, 0);
projector.unprojectVector(vector, camera);
var ray = new THREE.Ray(camera.position, vector.subSelf(camera.position).normalize());
if (SELECTED) {
var intersects = ray.intersectObject(plane);
SELECTED.position.copy(intersects[ 0 ].point.subSelf(offset));
return;
}
var intersects = ray.intersectObjects(items);
if (intersects.length > 0) {
if (INTERSECTED != intersects[ 0 ]) {
INTERSECTED = intersects[ 0 ].object;
plane.position.copy(INTERSECTED.position);
}
container.style.cursor = 'pointer';
}
else {
INTERSECTED = null;
container.style.cursor = 'auto';
}
}
function onMouseDown(event) {
event.preventDefault();
var vector = new THREE.Vector3(mouse.x, mouse.y, 0);
projector.unprojectVector(vector, camera);
var ray = new THREE.Ray(camera.position, vector.subSelf(camera.position).normalize());
var intersects = ray.intersectObjects(items);
if (intersects.length > 0) {
SELECTED = intersects[ 0 ].object;
var intersects = ray.intersectObject(plane);
offset.copy(intersects[ 0 ].point).subSelf(plane.position);
container.style.cursor = 'move';
}
}
function onMouseUp(event) {
event.preventDefault();
if (INTERSECTED) {
plane.position.copy(INTERSECTED.position);
SELECTED = null;
}
container.style.cursor = 'auto';
}
它很大程度上基于this例子,但没有颜色位数。
通过改变onmousedown事件代码,像这样
// OLD
SELECTED = intersects[0].object;
// NEW
SELECTED = intersects[0].object.parent;
我现在可以将完整的对象。这只适用于对象只有一个父项的情况,所以有些项目不能用这个代码移动。任何人都有建议确定它是否有父对象,如果它有移动,则会向上移动?
您是否可以通过点击投票箭头下方的复选标记来标记接受的答案,以便它未在未解答的问题下列出?谢谢! –