我认为这是获得 xyplane 的好方法(如果这是错误的或有更好的方法,请告诉我):
xyplane = new THREE.Plane().setFromCoplanarPoints(
new THREE.Vector3(0, 0, 0),
new THREE.Vector3(10, 15, 0),
new THREE.Vector3(100, -90, 0),
);
我有一台相机,它恰好在(0, 0, 1000)
看原点。我可以找到一个正好位于观察口左上角的坐标:
projector = new THREE.Projector();
topleft = new THREE.Vector3(-1, 1, 0);
through = projector.unprojectVector(topleft, camera);
through
然后THREE.Vector3 {x: -31.425217496422327, y: 22.169468302342334, z: 900.0000201165681}
是完美地位于画布的左上角。但是,我想找到 z = 0 的等效点。我尝试用射线来做到这一点;但是,我失败了。
ray = new THREE.Ray(camera.position, through);
point = ray.intersectPlane(xyplane);
point
然后{x: 34.91690754890442, y: -24.632742007573448, z: 0}
是甚至不接近。我误解了一些基本的东西。当我试图弄清楚这一点时,我将研究Ray 和 Plane 以及其他人之间的交点坐标。也许有人可以用简单的语言解释。