如何确定大物体前面的小物体和相机可见的时间?

时间:2013-10-03 14:28:47

标签: javascript three.js webgl

我是three.js和WebGL的新手。

在我的应用程序中,有两个对象的3D场景。

  1. 对象 - 这是一个很大的领域;
  2. object - 一个较小的球体,位于第一个物体的表面上。
  3. 大球体围绕其轴旋转。此外,还可以围绕球体旋转相机。

    因此,作为大球体表面上的小球体,它也随之旋转。当大球体转向相机时,小球体将对我们可见,当大球体位于其前方时,它将不可见。

    问题是,如何确定相机可见小球体的时间以及何时不可见?

    另外,我需要在2d中获得可见的小球体坐标。我怎么能这样做?

1 个答案:

答案 0 :(得分:1)

这可以通过three.js的内置raycasterprojector功能来实现。首先,请尝试查看this demo及其源代码。这是another example。通过这种方式,您可以确定哪些对象更接近从相机位置发出的不可见线。

否则,如果您只是对两个物体中哪个物体更靠近相机感兴趣,您只需检查它们的哪个位置值与相机坐标的距离较小。三维距离公式会派上用场:

bigSphereDistance = Math.sqrt( Math.pow(camera.position.x - big.position.x,2) +
                               Math.pow(camera.position.y - big.position.y,2) +
                               Math.pow(camera.position.z - big.position.z,2) );
smallSphereDistance = Math.sqrt( Math.pow(camera.position.x - small.position.x,2) +
                                 Math.pow(camera.position.y - small.position.y,2) +
                                 Math.pow(camera.position.z - small.position.z,2) );
//then check...
bigSphereDistance > smallSphereDistance ? /*case*/ : /*case*/;

直观地说,当小球体的距离小于大球体的距离时,小球体是可见的,具有小球体半径的缓冲区。

要回答第二个问题,找到任何物体的2D坐标can accomplished like this