Currently I am working on a THREE.js project and I am facing problem while zooming the object.It is zooming based on the center position of render while using trackball controls but I want to zoom based on the cursor position.I have tried disabling the zooming under trackball controls using controls.noZoom=true
and wrote a code under mousewheel.It is quite good as i expected but it is zooming in only not zooming out.
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));
};
Help me with this code to zoom based on mouse position.
I came up with the solution and it works pretty cool
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));
}
};
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With