javascript - 无法让 Three.js TrackballControl 缩放工作

标签 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,我似乎无法让 Zoom 与 Three.js 中的轨迹球控制对象一起使用。我使用了 OrbitControls 对象,它工作得很好,但当我使用 TrackballControls 时,缩放根本不起作用。我确保 noZoom 为 false 并尝试使用 ZoomSpeed,但均无济于事。我还尝试调试 TrackballControls 的源代码,但这并没有让我有任何进展。

我使用正交相机有关系吗?在我看来,变焦实际上只是前后移动相机来实现变焦,因此变焦不适用于正交投影,但同时这会扰乱使用透视相机的图像的透视效果。

如果有任何帮助,我将不胜感激。谢谢!

最佳答案

在我看来,TrackallControls 使用的缩放方法实际上是来回移动相机,因此使用正交相机时无法实现缩放。为了获得缩放效果,我所做的是将以下几行添加到我的 TrackballControls.js 源代码中的第 480 行附近:

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;

对其余情况执行相同的操作,现在滚动鼠标时可以进行缩放。但它不像普通变焦那么流畅。此外,即使您使用透视相机,您添加的代码仍然会运行,因此如果您希望变焦在透视相机上正常工作,则必须在其中的某个位置进行检查以防止出现这种情况。

关于javascript - 无法让 Three.js TrackballControl 缩放工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52030135/

相关文章:

javascript - 如何合并同一数组中共享相同未知键的多个对象?

javascript - Underscore.js:_.object 函数的意外行为

javascript - Angularjs 失败 http get 请求

javascript - THREE.js OBJ 加载器对象

javascript - 如何使用 Three.js 中的回调异步加载多个纹理?

javascript - 按下键时响应鼠标移动

javascript - 在页面加载时设置 div 背景

javascript - 在数组对象中、在选定的键中过滤搜索

javascript - 如何修改使用 OBJMTLLoader 加载的场景中对象的参数?

javascript - 如何在 Three.js 中一次仅加载一个模型?