Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/411.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
Javascript 缩放THREE.js对象上的光标位置_Javascript_Jquery_Three.js - Fatal编程技术网

Javascript 缩放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

目前我正在处理一个THREE.js项目,在缩放对象时遇到问题。它在使用轨迹球控件时基于渲染的中心位置进行缩放,但我希望基于光标位置进行缩放。我已尝试使用
控件禁用轨迹球控件下的缩放。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文件中?我想是的,但我只是确定一下。谢谢。摄像机变量和轨迹球控制变量是同一个文件中的变量。我已经为您编辑了答案。