我正在用Three.JS创建一个几何操作原型.我正在使用OrbitControls.JS来操作相机并且无法启用和禁用控件.
这是我的演示:http: //moczys.com/webGL/Prototype_V02-05.html
我们的想法是,当您将鼠标悬停在四面体的顶点上时,会出现一个灰色球体.通过单击球体,可以调出顶点操作手柄.然后通过单击箭头上的拖动,可以在该方向上移动顶点.然后,您应该可以单击几何体以退出此模式.
单击时会出现问题.如果在移动顶点后单击并拖动,相机会变得有点疯狂.根据您与原始点的距离,OrbitControls会将相机旋转一段距离.这只是一个非常刺耳/混乱的行为,真正影响可用性,所以我想解决它,但似乎无法找到问题.
我认为它是在OrbitControls.js中记录初始位置,然后保持它直到它们被重新启用...但是我无法弄清楚在哪里.这发生在MouseUp,MouseDown和MouseMove事件处理程序中的某处.我希望对于那些可能比我更了解OrbitControls操作的人来说,这可能会很有趣.
这是我的点击/拖动事件处理程序代码:
function onDocumentMouseMove( event )
{
// the following line would stop any other event handler from firing
// (such as the mouse's TrackballControls)
//event.preventDefault();
// update the mouse variable
mouse.x = ( event.clientX / window.innerWidth ) * 2 - 1;
mouse.y = - ( event.clientY / window.innerHeight ) * 2 + 1;
if(MOUSEDOWN&&editMode==2)
{
var vector = new THREE.Vector3( mouse.x, mouse.y, 0.5 );
projector.unprojectVector( vector, camera );
var raycaster = new …Run Code Online (Sandbox Code Playgroud)