Threejs利用矩阵进行镜像
由于在Threejs中没有镜像的api,要想获得镜像,就需要自己去写方法。
首先看看镜像的原理:
https://blog.****.net/rabbitguiming/article/details/3963213
然后根据原理写方法,这里需要用到applyMatrix这个api,另外有一点比较奇怪的是,如果我不用translateZ这个api,前面的赋值就没用,不清楚究竟是什么原理。下面的例子可以看到,赋予的z值是300,经过矩阵的计算后,变成了-300.
function initObject() {
var geometry = new THREE.CubeGeometry(100, 100, 100);
var material = new THREE.MeshPhongMaterial({color:0xFF0000});
mesh = new THREE.Mesh(geometry, material);
var m = new THREE.Matrix4();
var vec=new THREE.Vector3(0,0,1);
m.set( 1-2*vec.x*vec.x, -2*vec.x*vec.y, -2*vec.x*vec.z, 0,
-2*vec.x*vec.y, 1-2*vec.y*vec.y, -2*vec.y*vec.z, 0,
-2*vec.x*vec.z, -2*vec.y*vec.z, 1-2*vec.z*vec.z, 0,
0, 0, 0, 1 );
mesh.applyMatrix(m);
mesh.translateZ(300);
scene.add(mesh);
}