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

时间:2017-08-10 10:31:05

标签: three.js clipping

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

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

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

1 个答案:

答案 0 :(得分:2)

来自Material.clippingPlanes

  

用户定义的剪裁平面在世界空间中指定为THREE.Plane对象。

由于飞机位于世界空间,因此它们不会在您对象的本地空间内定位。您需要将对象的世界变换矩阵应用于平面,以便将它们与您的对象对齐。

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);