在三个轨道中跟踪相对于球体中心的精度

时间:2016-05-15 15:58:52

标签: javascript three.js

我在three.js中建立射击游戏,其中球体出现用户必须射击。 拍摄球体后,物体消失,另一个球体弹出。我正在使用指针锁定控件。

我使用以下方法检测球体的射击时间:

            function onDocumentMouseDown( event ) {
                var mouse3D = new THREE.Vector3();
                var raycaster = new THREE.Raycaster();
                mouse3D.normalize();
                controls.getDirection( mouse3D );
                raycaster.set( controls.getObject().position, mouse3D );
                var intersects = raycaster.intersectObjects( objects );
                // Change color if hit sphere
                if ( intersects.length > 0 ) {
                    intersects[ 0 ].object.material.color.setHex( Math.random() * 0xffffff );
                    //hide shpere
                    object.traverse(function(child){child.visible = false;});
                    update_sphereplace();
                }
            }

这很有效,但现在我想整合一个准确性功能。 如何根据球体的中心跟踪精度?因此,例如击中中心应该给我100的准确度。击中相对远离中心的球体应该给出接近0的精度(但不是0,因为0将缺少球体)。

1 个答案:

答案 0 :(得分:0)

你需要知道光线错过球体网格中心的程度。

var missDistance = raycaster.ray.distanceToPoint( intersects[ 0 ].object.position );

然后,您需要将该值映射到分数 - 例如:

var score = 100 * Math.max( 1 - ( missDistance / sphereRadius ), 0 );

three.js r.76