Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/379.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何确定大对象前面的小对象何时对摄影机可见?_Javascript_Three.js_Webgl - Fatal编程技术网

Javascript 如何确定大对象前面的小对象何时对摄影机可见?

Javascript 如何确定大对象前面的小对象何时对摄影机可见?,javascript,three.js,webgl,Javascript,Three.js,Webgl,我是three.js和WebGL的新手 在我的应用程序中,有一个包含两个对象的3D场景 物体-它是一个大球体 对象-位于第一个对象表面上的较小球体 大球体绕其轴旋转。还有一种可能性是围绕球体旋转摄像机 因此,作为大球体表面上的一个小球体,它也会随之旋转。当大球体转向相机时,我们可以看到小球体,而当一个大球体在它前面时,它将不可见 问题是,我如何确定一个小球体何时对相机可见,何时不可见 另外,我需要得到小球体的二维坐标。我如何做到这一点?这可以通过three.js内置的raycaster和proj

我是three.js和WebGL的新手

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

  • 物体-它是一个大球体
  • 对象-位于第一个对象表面上的较小球体
  • 大球体绕其轴旋转。还有一种可能性是围绕球体旋转摄像机

    因此,作为大球体表面上的一个小球体,它也会随之旋转。当大球体转向相机时,我们可以看到小球体,而当一个大球体在它前面时,它将不可见

    问题是,我如何确定一个小球体何时对相机可见,何时不可见


    另外,我需要得到小球体的二维坐标。我如何做到这一点?

    这可以通过three.js内置的
    raycaster
    projector
    功能来实现。首先,试着看一看它的代码和源代码。这是。通过这种方式,可以确定哪些对象更靠近从摄影机位置发射的不可见线

    否则,如果您只是想知道两个对象中哪一个更靠近摄影机,则只需检查它们的位置值中哪一个与摄影机坐标的距离较小。三维距离公式将派上用场:

    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*/;
    
    直观地说,当小球体的距离小于大球体的距离时,小球体是可见的,缓冲区为小球体的半径


    要回答第二个问题,请查找任何对象的二维坐标。

    你好,迈克,欢迎来到stackoverflow:)这个问题似乎研究得很好,但需要您进行一些编辑才能得到建设性的答案。如果您能指出球体跟踪其空间位置所使用的部分实现,那就太好了。谢谢:)您是对的-少格式就是少答案。