将threejs网格包裹在另一个网格上

时间:2019-02-02 07:42:56

标签: javascript three.js mesh

我对three.js相当陌生,并且有一个要求,即网格中的对象需要环绕另一个具有曲线的网格。在我的场景中,我分别具有三个网格平面1,平面2和基本网格(椭球)。见下文。

(b)

(a)

我希望能够以某种方式将plane1和plane2网格投影到基础网格上,以便将其包裹在基础网格的表面上。见下文。如果基地是例如。一个长方体,然后我也只是定位在其平坦的表面,但因为我的基础网格是弯曲的,我有这个问题的基准面1和平面2。在threejs中可以将网格投影到另一个网格上吗?

(c) (d)

1 个答案:

答案 0 :(得分:1)

好,要将一个网格“投影”到另一个网格的表面上,您需要从外部向椭球的中心进行一些raycasting处理。光线投射器可以给您相交的位置。假设您在(0, 0, 0)处放置了一个椭球,则可以执行以下操作:

https://threejs.org/docs/#api/en/core/Raycaster.set

// Vector with desired outer position
var startPoint = new Vector3(10, 5, 0);

// Normalized vector pointing toward center of ellipsoid 
// (basically in the opposite direction of startPoint)
var endDirection = new Vector3(-10, -5, 0).normalize();

raycaster.set(startPoint, endDirection);
var intersects = raycaster.intersectObjects( ellipsoid );
console.log(intersects);

您将看到intersects变量将具有一个object of this format,其截取点为(x,y,z)。