three.js将Plane绑定到代理对象转换

时间:2018-03-23 10:25:31

标签: three.js

我试图根据Object3D(位置和旋转)变换平面。该平面用作clipPlane。

如果我调用Plane.applyMatrix4(Object.matrixWorld),它只会应用矩阵一次,并且不会将Plane绑定到该矩阵以供将来转换。 但是,如果我在循环中调用相同的函数,则应用于Plane的变换是连续的。 EG如果我在一个循环中调用Object.rotate.z = 1,然后调用Plane.applyMatrix4(Object.matrixWorld),则平面在每个循环中沿Z轴旋转1个单位。

有什么想法吗?

当这个平面被用作剪裁平面时,我也尝试在被剪裁的网格的着色器材质中对其进行转换,并且它可能是性能最佳的,但我不是很熟练这一点。

2 个答案:

答案 0 :(得分:1)

我会这样:

object.add( plane );

通过这种方式,planeobject的孩子。应用于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 );
}