基于局部轴的平面局部裁剪
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 )];
但是当物体处于非零位置且旋转非零并且切割不随物体方向改变时,此代码失败。
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);
我试图使用 material.clippingPlanes 剪辑 planeBuffer 的左半部分。 当对象位于旋转中心 (0,0,0) 时,剪裁工作。
object.material.clippingPlanes =
[object.getWorldDirection().cross(object.up).normalize(), object.position.z )];
但是当物体处于非零位置且旋转非零并且切割不随物体方向改变时,此代码失败。
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);