Javascript 防止Threejs透视摄影机的Y值为负值?

Javascript 防止Threejs透视摄影机的Y值为负值?,javascript,webgl,three.js,Javascript,Webgl,Three.js,如何防止透视摄像头的位置y为负值 我正在使用一个稍加修改的轨迹球控件,用鼠标控制相机,这会阻止相机在z轴上旋转,但我想让我的相机保持在“地面”之上,假设你有两个相机。其中一个由轨迹球控制装置控制。另一个用于渲染。这是渲染循环的外观: controls.update(); camera2.position.copy( camera.position ); if ( camera2.position.y < 0 ) camera2.position.y = 0; renderer.ren

如何防止透视摄像头的位置y为负值


我正在使用一个稍加修改的轨迹球控件,用鼠标控制相机,这会阻止相机在z轴上旋转,但我想让我的相机保持在“地面”之上,假设你有两个相机。其中一个由
轨迹球控制装置控制。另一个用于渲染。这是渲染循环的外观:

controls.update();

camera2.position.copy( camera.position );

if ( camera2.position.y < 0 ) camera2.position.y = 0;

renderer.render( scene, camera2 );
controls.update();
camera2.位置.复制(camera.position);
如果(camera2.position.y<0)camera2.position.y=0;
渲染器。渲染(场景,摄影机2);

看一看
三个轨道控制按钮,它们可以让相机保持直立而不会被黑客攻击

如果您使用
THREE.OrbitControls
,并且希望约束天顶角以使相机保持在地面上,则需要进行简单的调整

OrbitControls.update()
中,替换此行:

phi = Math.max( EPS, Math.min( Math.PI - EPS, phi ) );
关于这一点:

phi = Math.max( EPS, Math.min( Math.PI/2 - EPS, phi ) );

这是这类事情的常见模式吗?我对3d图形很陌生。不。这并不常见。但是,除非你试图破解
轨迹球控制
,否则这是我能想到的唯一解决方案。这也是防止相机滚动的方法吗?我在TrackballControls中做了很多自定义控件,但我觉得这太乱了。我想我应该有两个摄像头,一个响应我的鼠标移动,另一个显示给最终用户。