从相机三个js获取两个物体的距离

时间:2013-01-30 10:31:19

标签: javascript position three.js

我在空间中有两个正方形,就像立方体的前后墙一样,顶点是

x=-2 y=-1138 z=-2;
x=-2 y=-1134 z=-2;
x=2 y=-1138 z=-2;
x=2 y=-1134 z=-2

第二

x=-2 y=1134 z=2;
x=-2 y=1138 z=2;
x=2 y=1134 z=2;
x=2 y=1138 z=2

当我像这样从相机计算distanceTo时

var point1 = this.camera.matrixWorld.getPosition().clone();
var point2 = this.mesh.cubePlane3.children[0].matrixWorld.getPosition().clone();
var distance = point1.distanceTo( point2 );  

对于20,09,我总是保持相同的距离。这些方块在空间中旋转,因此只改变旋转,我需要以某种方式找出哪个墙更接近相机,以便能够做出更靠近相机的立方体3墙不显示的东西,然后显示下3个墙。 / p>

显然我并不理解这背后的数学,例如为什么彼此相邻的墙有y的正坐标和下一个负+为什么距离是相同的值,当一个在z轴上比第二个更接近时。你能帮助我一个人如何能够靠近墙壁吗?谢谢

3 个答案:

答案 0 :(得分:2)

每个几何体都有一个computeBoundingBox函数。所以你可以这样做:     var bbox = geometry.computeBoundingBox(); 对于您感兴趣的每个几何体,然后使用     bbox.center() 获得几何体的中心。更快的计算是在几何上使用computeBoundingSphere。 然后,您只需比较中心与相机位置的关系。

答案 1 :(得分:0)

类似的问题是由我,另一个人,其他人......等等问的。

Chek this question

答案 2 :(得分:0)

我使用了带有此代码的computeBoundingBox

    this.mesh[cubePlane[0]].children[0].geometry.computeBoundingBox();

    var position = new THREE.Vector3();
    position.sub( this.mesh[cubePlane[0]].children[0].geometry.boundingBox.max, this.mesh[cubePlane[0]].children[0].geometry.boundingBox.min );
    position.multiplyScalar( 0.5 );
    position.addSelf(this.mesh[cubePlane[0]].children[0].geometry.boundingBox.min );

    this.mesh[cubePlane[0]].children[0].matrixWorld.multiplyVector3( position );

    var point1 = this.camera.matrixWorld.getPosition().clone();
    var point2 = position;
    var distance = point1.distanceTo( point2 );

它的确如此,感谢您的建议:)