繁体   English   中英

Three.js带有动画的光线投射对象选择

[英]Three.js raycasting object selection with animation

对于我在静态网格物体上的项目,射线投射选择效果很好,但是对于动画网格物体,射线选择似乎看不到网格物体的运动,只能响应网格物体的非动画(原始)位置。

我的选择代码如下:

element.addEventListener( 'mouseup', function ( event ) 
{

  var vector = new THREE.Vector3(( event.clientX / window.innerWidth ) * 2 - 1, -( event.clientY / window.innerHeight ) * 2 + 1, 0.5);
  vector = vector.unproject(camera);
  var raycaster = new THREE.Raycaster(camera.position, vector.sub(camera.position).normalize());
  var intersects = raycaster.intersectObjects(pickable_objects, true);

  if (intersects.length > 0) 
  {
      //I change the object's material colour so that I can see the selection
  }
}

pickable_objects是可以选择的three.js网格对象的数组的情况下,据我所知,这些对象不携带动画信息,因此我抱怨的结果对于某些人而言可能并不奇怪。

我没有在这里包括变色代码或JSON网格读取器代码,因为我认为这没有用。

因此,使用静态网格物体时,射线投射非常准确,但是对于动画网格物体,我必须单击对象的正中央或找到其原始非动画位置才能使选择工作。

如果您查看github存储库中的源代码,尤其是Raycaster.js ,则会看到实际的实现是在geometry对象中。 例如, Mesh.js通过迭代其三角形并检查射线是否与任何三角形相交来实现raycast ,但SkinnedMesh.js不会覆盖此方法。

最后,在问题页面中快速搜索显示这实际上是一个已知的限制-https: //github.com/mrdoob/three.js/issues/6440

您似乎剩下2个选项-在github上提出问题并要求ETA或自己实现(然后希望发送一个拉取请求)。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM