【问题标题】:Three JS — Get ground position directly in front of Camera三个 JS - 直接在相机前面获取地面位置
【发布时间】:2018-10-05 19:15:43
【问题描述】:

我有一个透视相机,俯视 Z 轴。我想在相机前面(Y 轴)的给定距离(比如说 100)处找到地板的 X、Z 位置。

相机旋转顺序是'YXZ',所以Y描述了偏航。

camera = new THREE.PerspectiveCamera(45, window.app.width / window.app.height, 1, 10000);
camera.rotation.order = "YXZ";
camera.position.z = 0;
camera.position.y = 50;

我正在尝试计算相机正前方区域的 XZ:

const inFrontOfCamera = {
    x: camera.position.x + (Math.cos(camera.rotation.y) * 100),
    z: camera.position.z + (Math.sin(camera.rotation.y) * 100),
}

当我在某些方向上寻找时,这很有效,但在其他方向上却没有。我觉得我很接近,但我的理解有差距!

非常感谢任何指针和解决方案。

谢谢。

【问题讨论】:

    标签: 3d three.js rotation trigonometry


    【解决方案1】:

    使用RaycasterRay

    var raycaster = new Raycaster();
    raycaster.setFromCamera( new Vector2(), camera );
    var inFrontOfCamera = new Vector3();
    raycaster.ray.at( 100, inFrontOfCamera );
    

    如果您正在寻找地平面上的点:

    var ground = new Plane() //defaults to horizontal plane at y=0
    raycaster.ray.at( raycaster.ray.distanceToPlane( ground ), inFrontOfCamera );
    

    【讨论】:

    • 谢谢,我试试看。只是想知道它的性能,或者是否有一种方法只使用来自旋转和位置值的三角函数?
    • 我猜它与渲染相比微不足道。 new Vector3( 0, 0, -100 ).applyMatrix4( camera.matrixWorld ) 应该也可以吗?
    【解决方案2】:

    我遇到了类似的问题,我想获取相机下方的地板对象,而我的相机正在观察其他东西。

    请参阅下面的架构:

    为了检索对象,我简单地为方向 (0, -1, 0) 定义了一个指向地面(y 轴)的向量,并且我使用了一个使用摄像机位置的光线投射器,如下所示:

    var vect = new THREE.Vector3(0, -1, 0);    
    raycaster.set(camera.position, vect);
    

    【讨论】:

      猜你喜欢
      • 2015-12-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-07-28
      • 2021-04-01
      • 2018-11-22
      • 2016-11-02
      • 1970-01-01
      相关资源
      最近更新 更多