我在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将缺少球体)。
答案 0 :(得分:0)
你需要知道光线错过球体网格中心的程度。
var missDistance = raycaster.ray.distanceToPoint( intersects[ 0 ].object.position );
然后,您需要将该值映射到分数 - 例如:
var score = 100 * Math.max( 1 - ( missDistance / sphereRadius ), 0 );
three.js r.76