Three.js 根据鼠标滚轮中光标的位置进行缩放
我目前正在处理一个THREE.js项目。当使用轨迹球控件缩放时,它是相对于模型的中心进行缩放的。但是我想用鼠标滚轮根据光标的位置进行缩放。任何熟悉的人请帮助我完成此操作。Three.js 根据鼠标滚轮中光标的位置进行缩放,three.js,Three.js,我目前正在处理一个THREE.js项目。当使用轨迹球控件缩放时,它是相对于模型的中心进行缩放的。但是我想用鼠标滚轮根据光标的位置进行缩放。任何熟悉的人请帮助我完成此操作。 提前感谢。在鼠标滚轮中添加此代码,它可以帮助您根据光标位置而不是相对于模型进行缩放 如果您使用的是轨迹球控件,则可以将其用于平移和旋转。 因此,在mousewheel中将轨迹球控件设置为enabled为false renderer.domElement.addEventListener('mousewheel',
提前感谢。在鼠标滚轮中添加此代码,它可以帮助您根据光标位置而不是相对于模型进行缩放 如果您使用的是轨迹球控件,则可以将其用于平移和旋转。 因此,在mousewheel中将轨迹球控件设置为enabled为false
renderer.domElement.addEventListener('mousewheel',
function (e) {
mousewheel(e);
},
false);
function mousewheel(event) {
trackBallControls.noZoom = true;
event.preventDefault();
var factor = 50;
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);
//console.log(vector);
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));
camera.updateProjectionMatrix();
} else {
camera.position.subVectors(camera.position,
vector.setLength(factor));
trackBallControls.target.subVectors(trackBallControls.target,
vector.setLength(factor));
camera.updateProjectionMatrix();
}
}
renderer.domeElement.addEventListener('mousewheel',
职能(e){
鼠标轮(e);
},
假);
功能鼠标滚轮(事件){
trackBallControls.noZoom=true;
event.preventDefault();
var系数=50;
var mX=(event.clientX/jQuery(container.width())*2-1;
var mY=-(event.clientY/jQuery(container.height())*2+1;
var vector=新的3.Vector3(mX,mY,0.5);
//console.log(向量);
矢量。取消投影(摄像机);
矢量子(摄像机位置);
if(event.deltaY<0){
camera.position.addVectors(camera.position,
向量集长度(因子);
trackBallControls.target.addVectors(trackBallControls.target,
向量集长度(因子);
camera.updateProjectMatrix();
}否则{
camera.position.subVectors(camera.position,
向量集长度(因子);
trackBallControls.target.subVectors(trackBallControls.target,
向量集长度(因子);
camera.updateProjectMatrix();
}
}
谢谢@gaitat提供您的参考,但您能用THREE.js代码指导我吗?这不是我要找的。这带来的问题是轴心点的位置。光标位置在二维空间中,深度未定义。有一些脚本可以使用orbit控件实现这种行为,但根据我自己的经验,最后感觉非常奇怪。