目前我正在开发一个THREE.js项目,我在缩放对象时遇到问题。在使用轨迹球控件的同时基于渲染的中心位置进行缩放但是我想根据光标位置进行缩放。我有尝试使用controls.noZoom=true
禁用轨迹球控件下的缩放,并在鼠标滚轮下编写代码。这是我预期的非常好,但它只是放大而不是缩小。
mousewheel = function (event) {
event.preventDefault();
event.stopPropagation();
var factor = 15;
var mX = (event.clientX / jQuery(container).width()) * 2 - 1;
var mY = -(event.clientY / jQuery(container).height()) * 2 + 1;
var vector = new THREE.Vector3(mX, mY, 0.5);
zoomstart = vector.unproject(camera);
vector.sub(camera.position);
camera.position.addVectors(camera.position, vector.setLength(factor));
trackBallControls.target.addVectors(trackBallControls.target, vector.setLength(factor));
};
帮助我使用此代码根据鼠标位置进行缩放。
答案 0 :(得分:2)
我想出了解决方案,它的工作非常酷
var camera = new THREE.PerspectiveCamera(45, container.offsetWidth /
container.offsetHeight, 1, 100000);
camera.position.set(0, 0, 40);
var trackBallControls= new THREE.TrackballControls(webGl.cameraP, container);
trackBallControls.rotateSpeed = 2.0;
trackBallControls.zoomSpeed = 3.0;
trackBallControls.panSpeed = 2.0;
trackBallControls.dynamicDampingFactor = 0.3;
trackBallControls.minDistance = 300;
trackBallControls.maxDistance = 4000;
trackBallControls.noZoom = false;
trackBallControls.noRotate = false;
trackBallControls.noPan = false;
trackBallControls.staticMoving = true;
trackBallControls.enabled = true;
mousewheel = function (event) {
var factor = 15;
var mX = (event.clientX / jQuery(container).width()) * 2 - 1;
var mY = -(event.clientY / jQuery(container).height()) * 2 + 1;
var vector = new THREE.Vector3(mX, mY, 0.1);
vector.unproject(camera);
vector.sub(camera.position);
if (event.deltaY < 0) {
camera.position.addVectors(camera.position, vector.setLength(factor));
trackBallControls.target.addVectors(trackBallControls.target, vector.setLength(factor));
} else {
camera.position.subVectors(camera.position, vector.setLength(factor));
trackBallControls.target.subVectors(trackBallControls.target, vector.setLength(factor));
}
};