Javascript 缩放THREE.js对象上的光标位置
目前我正在处理一个THREE.js项目,在缩放对象时遇到问题。它在使用轨迹球控件时基于渲染的中心位置进行缩放,但我希望基于光标位置进行缩放。我已尝试使用Javascript 缩放THREE.js对象上的光标位置,javascript,jquery,three.js,Javascript,Jquery,Three.js,目前我正在处理一个THREE.js项目,在缩放对象时遇到问题。它在使用轨迹球控件时基于渲染的中心位置进行缩放,但我希望基于光标位置进行缩放。我已尝试使用控件禁用轨迹球控件下的缩放。noZoom=true并编写了一段代码在鼠标滚轮下。它和我预期的一样好,但它只是放大而不是缩小 mousewheel = function (event) { event.preventDefault(); event.stopPropagation(); var factor
控件禁用轨迹球控件下的缩放。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));
};
这段代码可以帮助我根据鼠标位置进行缩放。我想出了解决方案,效果非常好
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));
}
};
var-camera=新的三个透视摄像头(45,container.offsetWidth/
集装箱(离岸,11000);
摄像机位置设置(0,0,40);
var trackBallControls=新的三个.trackBallControls(webGl.cameraP,container);
Trackball Controls.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;
鼠标滚轮=功能(事件){
var系数=15;
var mX=(event.clientX/jQuery(container.width())*2-1;
var mY=-(event.clientY/jQuery(container.height())*2+1;
var向量=新的三个向量3(mX,mY,0.1);
矢量。取消投影(摄像机);
矢量子(摄像机位置);
if(event.deltaY<0){
camera.position.addVectors(camera.position,vector.setLength(因子));
trackBallControls.target.addVectors(trackBallControls.target,vector.setLength(factor));
}否则{
camera.position.subVectors(camera.position,vector.setLength(factor));
trackBallControls.target.subVectors(trackBallControls.target,vector.setLength(factor));
}
};
我找到了解决方案嘿。我正在努力实现和你一样的目标。在使用你的代码时,我遇到了一些错误,并向你提出了一些问题。camera是单独js文件中预定义的camera变量吗?trackBallControls轨迹球控制变量的名称是否也在单独的js文件中?我想是的,但我只是确定一下。谢谢。摄像机变量和轨迹球控制变量是同一个文件中的变量。我已经为您编辑了答案。