代码之家  ›  专栏  ›  技术社区  ›  Jack Wild

三名JS直接在摄像机前获得地面位置

  •  1
  • Jack Wild  · 技术社区  · 7 年前

    我有一个透视相机,从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),
    }
    

    当我朝某个方向看时,这是可行的,但其他方向看不到。我觉得我很接近,但在我的理解上有差距!

    非常感谢任何建议和解决方案。

    谢谢

    2 回复  |  直到 7 年前
        1
  •  2
  •   Ben West    7 年前

    使用 Raycaster Ray

    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 );
    
        2
  •  0
  •   Sala ARUN1992    6 年前

    我也遇到过类似的问题,我想得到 楼板对象 在我的相机下面,我的相机在看别的东西。

    请参见以下架构:

    enter image description here

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

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