无法使Three.js TrackballControl缩放正常工作

时间:2018-08-26 20:46:07

标签: javascript three.js

My code

//zoom and scaleFactor are both constants
renderer = new THREE.WebGLRenderer();
renderer.setSize(window.innerWidth, window.innerHeight);
document.body.appendChild(renderer.domElement);
camera = new THREE.OrthographicCamera(
    window.innerWidth / - (zoom / scaleFactor),
    window.innerWidth / (zoom / scaleFactor),
    window.innerHeight / (zoom / scaleFactor),
    window.innerHeight / - (zoom / scaleFactor), 
    -500, 1000
);
scene = new THREE.Scene();
controls = new THREE.TrackballControls(camera, renderer.domElement);

您好,stackoverflow的人们,我似乎无法缩放到与Three.js中的轨迹球控制对象一起使用。我使用了OrbitControls对象,并且可以流畅地工作,但是当我使用TrackballControls时,缩放根本不起作用。我确保noZoom为false并以zoomSpeed播放,但均无济于事。我还尝试调试TrackballControls的源代码,但这并没有帮助我。

我使用的是正交摄影机吗?在我看来,变焦实际上只是将摄像机前后移动来实现变焦,因此,变焦不适用于正交投影,但同时会干扰使用透视摄像机的图像的透视。

我将不胜感激。谢谢!

1 个答案:

答案 0 :(得分:1)

在我看来,TrackallControls使用的缩放方法实际上是前后移动相机,因此在使用正交相机时无法实现缩放。我要做的缩放操作是将以下行添加到第480行附近的TrackballControls.js源中:

case 2:
    // Zoom in pages
    _zoomStart.y -= event.deltaY * 0.025;
    //add the following 2 lines
    object.zoom -= event.deltaY * 0.025;
    object.updateProjectionMatrix();
    break;

对于其余情况,请执行相同的操作,然后在滚动鼠标时可以缩放。但是,它不像普通缩放那样流畅。另外,即使使用透视相机时,添加的代码仍然可以运行,因此,如果要使缩放功能与透视相机正常工作,就必须在其中进行检查。