2017-09-22 23 views
0

我在窗口的右侧和左侧有两个对象。 enter image description here如何分别使用两个PerspectiveCameras及其两个对象进行缩放?

我想在我将它悬停时单独缩放这些对象。

var itsLeftControls, itsRightControls; 
    itsRightControls = new THREE.TrackballControls(itsRightCamera); 
    itsLeftControls = new THREE.TrackballControls(itsLeftCamera); 

document.getElementById('SubContainerLeft').onmouseover = function() { 
    aMouseOverActivate(itsLeftControls); 
    aMouseOverDeactivate(itsRightControls); 
    }; 

    document.getElementById('SubContainerRight').onmouseover = function() { 
    aMouseOverActivate(itsRightControls); 
    aMouseOverDeactivate(itsLeftControls); 
    }; 

    function aMouseOverActivate(theControl) 
    { 
    theControl.zoomSpeed = 0.8; 
    } 

    function aMouseOverDeactivate(theControl) 
    { 
    theControl.zoomSpeed = 0.0; 
    } 

    function animateLeft() 
    { 
    requestAnimationFrame(animateLeft); 
    renderLeft(); 
    } 

function renderLeft() 
{ 
    itsLeftControls.update(); 
    itsLeftRenderer.render(itsLeftScene, itsLeftCamera); 
} 

function animateRight() 
    { 
    requestAnimationFrame(animateRight); 
    renderRight(); 
    } 

function renderRight() 
{ 
    itsRightControls.update(); 
    itsRightRenderer.render(itsRightScene, itsRightCamera); 
} 

如果我将鼠标悬停在左侧,并尝试用鼠标滚轮缩放,它工作正常。之后当我悬停在右侧时,我可以看到右侧没有滚动鼠标的同样的缩放效果。 如何解决这个问题?

+0

向我们展示您的控件的代码 – 2pha

+0

我在这里使用了TrackballControls。首先,我设置左和右控件ZoomSpeed为0,并在每个侧面悬停时调用上述函数。 – Mhd

+0

@ 2pha - 我放大左侧,并去右侧。所以,右侧的对象也像左侧一样放大,自动:(我希望两侧的对象只在滚动鼠标滚轮时才起作用 – Mhd

回答

1

TrachballControls接受一个可选的第二个参数,它是将要附加鼠标事件侦听器的dom元素。
如果未提供此参数,则会将事件侦听器附加到文档。
这意味着您的轨迹球控件都在监听文档上的事件(而不是它们各自的容器,我认为您需要)。
因此,只需将您的场景容器div作为TrackballControlls的第二个参数发送出去,您应该对走。

var leftContainer = document.getElementById('SubContainerLeft'); 
var rightContainer = document.getElementById('SubContainerRight'); 

var itsRightControls = new THREE.TrackballControls(itsRightCamera, rightContainer); 
var itsLeftControls = new THREE.TrackballControls(itsLeftCamera, leftContainer); 
+0

yeey它的工作:)非常感谢你2pha。 – Mhd

相关问题