Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/three.js/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Three.js 根据鼠标滚轮中光标的位置进行缩放_Three.js - Fatal编程技术网

Three.js 根据鼠标滚轮中光标的位置进行缩放

Three.js 根据鼠标滚轮中光标的位置进行缩放,three.js,Three.js,我目前正在处理一个THREE.js项目。当使用轨迹球控件缩放时,它是相对于模型的中心进行缩放的。但是我想用鼠标滚轮根据光标的位置进行缩放。任何熟悉的人请帮助我完成此操作。 提前感谢。在鼠标滚轮中添加此代码,它可以帮助您根据光标位置而不是相对于模型进行缩放 如果您使用的是轨迹球控件,则可以将其用于平移和旋转。 因此,在mousewheel中将轨迹球控件设置为enabled为false renderer.domElement.addEventListener('mousewheel',

我目前正在处理一个THREE.js项目。当使用轨迹球控件缩放时,它是相对于模型的中心进行缩放的。但是我想用鼠标滚轮根据光标的位置进行缩放。任何熟悉的人请帮助我完成此操作。
提前感谢。

在鼠标滚轮中添加此代码,它可以帮助您根据光标位置而不是相对于模型进行缩放

如果您使用的是轨迹球控件,则可以将其用于平移和旋转。 因此,在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控件实现这种行为,但根据我自己的经验,最后感觉非常奇怪。