gpt4 book ai didi

javascript - OrbitControl - 限制平移运动

转载 作者:行者123 更新时间:2023-12-05 01:25:30 25 4
gpt4 key购买 nike

有什么方法可以限制场景中摄像机的平移运动吗?

尝试在 orbitControls 中更改 pan 方法,但我对结果并不满意,我希望有更方便/正确的方法来做到这一点..

if ( scope.object instanceof THREE.PerspectiveCamera ) {
// perspective
var position = scope.object.position;

var offset = position.clone().sub( scope.target );
var targetDistance = offset.length();

// half of the fov is center to top of screen
targetDistance *= Math.tan( ( scope.object.fov / 2 ) * Math.PI / 180.0 );

// we actually don't use screenWidth, since perspective camera is fixed to screen height
var dist_l = ( 2 * deltaX * targetDistance / screenHeight );
var dist_u = ( 2 * deltaY * targetDistance / screenHeight );

/////// X,Y limit calculation //////
var limit = 100;
if( (position.x - dist_l) <= -limit ){
dist_l = -0.1;
}else if( (position.x - dist_l) >= limit){
dist_l = 0.1;
}
if( (position.z - dist_u) <= -limit ){
dist_u = -0.1;
}else if( (position.z - dist_u) >= (limit*2.5) ){
dist_u = 0.1;
}
/////// X,Y limit calculation //////

scope.panLeft( dist_l );
scope.panUp( dist_u );

} else if ( scope.object instanceof THREE.OrthographicCamera ) {

// orthographic
scope.panLeft( deltaX * ( scope.object.right - scope.object.left ) / screenWidth );
scope.panUp( deltaY * ( scope.object.top - scope.object.bottom ) / screenHeight );

}

最佳答案

我也遇到了同样的问题。解决方案不是触摸 pan() 函数,而是检查 update() 函数中的限制。找到第 162 行:

// move target to panned location
scope.target.add( panOffset );

在此行之后进行极限计算:

if (scope.target.x > 1000)
scope.target.setX(1000);
if (scope.target.x < 0)
scope.target.setX (0);
...

这将钳制目标 x 位置。它工作得非常顺利。

关于javascript - OrbitControl - 限制平移运动,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38588594/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com