【问题标题】:Prevent Threejs Perspective Camera from having a negative Y value?防止 Threejs 透视相机的 Y 值为负?
【发布时间】:2012-08-21 06:15:33
【问题描述】:

如何防止THREE.PerspectiveCamera 产生否定的position.y

我正在使用稍微修改过的 TrackballControl 来用鼠标控制相机,这会阻止相机在 z 轴上旋转,但希望让我的相机保持在“地面”上方

【问题讨论】:

    标签: javascript webgl three.js


    【解决方案1】:

    假设您有 2 个摄像头。其中之一由TrackballControls 控制。另一个用于渲染。这是渲染循环的样子:

    controls.update();
    
    camera2.position.copy( camera.position );
    
    if ( camera2.position.y < 0 ) camera2.position.y = 0;
    
    renderer.render( scene, camera2 );
    

    【讨论】:

    • 这是这类事情的常见模式吗?我对 3d 图形还很陌生。
    • 不。这并不常见。但是,除非您尝试破解 TrackballControls,否则这是我能想到的唯一解决方案。
    • 这也是防止相机滚动的方法吗?我在 TrackballControls 中制作了一个自定义控件,但我觉得这很混乱。我想我宁愿有 2 个摄像头,一个响应我的鼠标移动,一个显示给最终用户。
    【解决方案2】:

    看看THREE.OrbitControls,它将保持相机直立而不会被黑客入侵。

    如果您使用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 ) );
    

    【讨论】:

      猜你喜欢
      • 2017-09-21
      • 2018-07-23
      • 2021-01-03
      • 2022-09-22
      • 1970-01-01
      • 1970-01-01
      • 2021-03-07
      • 2016-03-23
      • 2016-10-11
      相关资源
      最近更新 更多