Verge3D3.4版场景(Scene)拼图下新增了一个raycast拼图,我们可以叫它射线或射线检测拼图,该拼图能够从源点发射一条无限长的射线,并且贯穿三维场景中的任何物体,它能够获取经过物体的名称、源点与交点的距离、交点的三维坐标、交点法线坐标、交点UV坐标等信息。基于该拼图能够实现很多高级功能:
自定义三维交互事件(如双击)
相机传送
吸附物体表面
物体遮挡判断
碰撞检测...
如何使用我们一起来了解一下这个新拼图吧。
raycast拼图有3个插槽:源点、方向、相交物体。
源点就是发射射线的源点,可以是任何物体;
方向是一个矢量,可以是物体的方向(使用getobjectdirection拼图),相机的方向(使用getcameradirection拼图),也可以是通过矢量运算得到的方向;
相交物体是限制与场景中的哪些物体相交,保持None或Scene表示没有限制。
该拼图返回的数据稍微有些复杂,与其它大多数拼图返回一个静态数据不同,它会返回一组动态数据。
如果射线不与场景中的任何物体相交,它会返回一个空的列表,打印到控制台会输出:[]。
如果射线与一个物体相交,它会返回一个包含一个字典的列表,这个字典中包含以下数据项:
object-相交物体名称
distance-源点与交点的距离
point-交点的三维坐标
normal-交点法线坐标
uv-交点UV坐标
如果射线与多个物体相交,它会返回一个包含多个字典的列表,字典数据项与上面的相同,每个字典按相交物体的远近排序,近的在前。
所以,在处理返回数据时要做一个判断,根据列表是否为空或列表长度,做不同的处理。
以下拼图可以实现当点击场景中任何物体时,让立方体定位到点击位置,这是《用户手册》中的示例:
更进一步需要提示一下,这个示例拼图虽然是开发团队提供的,但是也存在优化空间,我会在进阶课中演示正确的做法,还有前面提到的一些功能,比如实现三维中双击事件,传送,吸附表面等等。
请