//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/