我是three.js和WebGL的新手。
在我的应用程序中,有两个对象的3D场景。
大球体围绕其轴旋转。此外,还可以围绕球体旋转相机。
因此,作为大球体表面上的小球体,它也随之旋转。当大球体转向相机时,小球体将对我们可见,当大球体位于其前方时,它将不可见。
问题是,如何确定相机可见小球体的时间以及何时不可见?
另外,我需要在2d中获得可见的小球体坐标。我怎么能这样做?
答案 0 :(得分:1)
这可以通过three.js的内置raycaster
和projector
功能来实现。首先,请尝试查看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。