我试图使用material.clippingPlanes剪辑planeBuffer的左半部分。 当对象位于旋转中心(0,0,0)时,裁剪将起作用。
object.material.clippingPlanes =
[object.getWorldDirection().cross(object.up).normalize(), object.position.z )];
但是当对象处于非零位置且旋转非零时,此代码失败,并且切割不会随对象的方向而改变。
答案 0 :(得分:2)
用户定义的剪裁平面在世界空间中指定为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);