Three.js - 变换控件
Three.js - TransformControls
我正在使用 transformControls 平移、旋转和缩放我的对象。我希望能够单击场景中的不同对象并在需要时转换它们:而且它有效!
唯一的问题是几何图形的可点击区域向上移动了一半:
也就是说我不能select我的对象点击下方区域,但是如果我点击上面它就会selected。
对于 collada 文件,情况更糟。
我想应该是这里的某个地方:
function onDocumentTouchStart(event){
event.preventDefault();
event.clientX = event.touches[0].clientX;
event.clientY = event.touches[0].clientY;
onDocumentMouseDown(event);
}
function onDocumentMouseDown(event){
event.preventDefault();
mouse.x = ( event.clientX / window.innerWidth ) * 2 - 1;
mouse.y = - ( event.clientY / window.innerHeight ) * 2 + 1;
raycaster.setFromCamera(mouse, camera);
var intersects = raycaster.intersectObjects(objects);
if(intersects.length > 0){
SELECTED = intersects[ 0 ].object;
scene.add(control);
control.attach(SELECTED);
} else{
scene.remove(control);
}
}
编辑:
天啊...问题是这里有一些边距...
但是现在,我的新手问题是我真的不知道如何将 transformControls 附加到我的对象。使用 transformControls,我仍然有问题。但是,当我在单击时更改 material 颜色时,效果很好。 transformControls 有某种边距吗?我这样做了:
if(intersects.length > 0){
SELECTED = intersects[ 0 ].object;
scene.add(control);
control.attach(SELECTED);
} else{
scene.remove(control);
}
答案很明显...:[=11=]
if(intersects.length > 0){
SELECTED = intersects[ 0 ].object;
control.attach(SELECTED);
scene.add(control);
} else{
control.detach(SELECTED);
scene.remove(control);
}
我忘记分离控件
sRcBh的回答基本正确,但代码有错误。 TransformControls
的 detach
方法不接受任何参数。
if (intersects.length > 0) {
SELECTED = intersects[ 0 ].object;
control.attach(SELECTED);
scene.add(control);
} else {
control.detach(); // <- THIS IS CORRECT
scene.remove(control);
}
(见https://threejs.org/docs/#examples/en/controls/TransformControls)
我正在使用 transformControls 平移、旋转和缩放我的对象。我希望能够单击场景中的不同对象并在需要时转换它们:而且它有效! 唯一的问题是几何图形的可点击区域向上移动了一半:
也就是说我不能select我的对象点击下方区域,但是如果我点击上面它就会selected。
对于 collada 文件,情况更糟。
我想应该是这里的某个地方:
function onDocumentTouchStart(event){
event.preventDefault();
event.clientX = event.touches[0].clientX;
event.clientY = event.touches[0].clientY;
onDocumentMouseDown(event);
}
function onDocumentMouseDown(event){
event.preventDefault();
mouse.x = ( event.clientX / window.innerWidth ) * 2 - 1;
mouse.y = - ( event.clientY / window.innerHeight ) * 2 + 1;
raycaster.setFromCamera(mouse, camera);
var intersects = raycaster.intersectObjects(objects);
if(intersects.length > 0){
SELECTED = intersects[ 0 ].object;
scene.add(control);
control.attach(SELECTED);
} else{
scene.remove(control);
}
}
编辑:
天啊...问题是这里有一些边距...
但是现在,我的新手问题是我真的不知道如何将 transformControls 附加到我的对象。使用 transformControls,我仍然有问题。但是,当我在单击时更改 material 颜色时,效果很好。 transformControls 有某种边距吗?我这样做了:
if(intersects.length > 0){
SELECTED = intersects[ 0 ].object;
scene.add(control);
control.attach(SELECTED);
} else{
scene.remove(control);
}
答案很明显...:[=11=]
if(intersects.length > 0){
SELECTED = intersects[ 0 ].object;
control.attach(SELECTED);
scene.add(control);
} else{
control.detach(SELECTED);
scene.remove(control);
}
我忘记分离控件
sRcBh的回答基本正确,但代码有错误。 TransformControls
的 detach
方法不接受任何参数。
if (intersects.length > 0) {
SELECTED = intersects[ 0 ].object;
control.attach(SELECTED);
scene.add(control);
} else {
control.detach(); // <- THIS IS CORRECT
scene.remove(control);
}
(见https://threejs.org/docs/#examples/en/controls/TransformControls)