基于局部轴的平面局部裁剪

Local clipping of planes based on local axis

我试图使用 material.clippingPlanes 剪辑 planeBuffer 的左半部分。 当对象位于旋转中心 (0,0,0) 时,剪裁工作。

object.material.clippingPlanes =
[object.getWorldDirection().cross(object.up).normalize(), object.position.z )];

但是当物体处于非零位置且旋转非零并且切割不随物体方向改变时,此代码失败。

来自Material.clippingPlanes

User-defined clipping planes specified as THREE.Plane objects in world space.

因为平面在 world space 中,所以它们不会在对象的本地 space 内定向。您需要将对象的世界变换矩阵应用于平面,以便将它们与您的对象对齐。

myMesh.material.clippingPlanes[0].applyMatrix4(myMesh.matrixWorld);

请注意,如果您的网格四处移动,您需要存储原始裁剪平面以应用每个变换的新 matrixWorld

// somehwere else in the code:
var clipPlane1 = new THREE.Plane(); // however you configure it is up to you

// later, probably in your render method:
myMesh.material.clippingPlanes[0].copy(clipPlane1);
myMesh.material.clippingPlanes[0].applyMatrix4(myMesh.matrixWorld);