我试图根据Object3D(位置和旋转)变换平面。该平面用作clipPlane。
如果我调用Plane.applyMatrix4(Object.matrixWorld),它只会应用矩阵一次,并且不会将Plane绑定到该矩阵以供将来转换。 但是,如果我在循环中调用相同的函数,则应用于Plane的变换是连续的。 EG如果我在一个循环中调用Object.rotate.z = 1,然后调用Plane.applyMatrix4(Object.matrixWorld),则平面在每个循环中沿Z轴旋转1个单位。
有什么想法吗?
当这个平面被用作剪裁平面时,我也尝试在被剪裁的网格的着色器材质中对其进行转换,并且它可能是性能最佳的,但我不是很熟练这一点。
答案 0 :(得分:1)
我会这样:
object.add( plane );
通过这种方式,plane
是object
的孩子。应用于object
的所有转换也适用于plane
。此外,现在很容易将plane
转换为object
。
答案 1 :(得分:0)
我发现最快的解决方案是重置并将对象的.matrixWorld应用于平面。正如我之前所说,添加有用的转换和"绑定" THREE.Plane对象的方法,因为它也被用作剪裁平面。
现在我这样做了:
// will store the object's inverse transformations matrix in world coords
var inversePrevMatrix = new THREE.Matrix4();
function loop(){
// reset plane previous transformations
plane.applyMatrix4( inversePrevMatrix );
// apply actual object matrix in world coordinates
plane.applyMatrix4( object.matrixWorld );
// set prevMatrix
inversePrevMatrix.getInverse( object.matrixWorld );
}