Skip to content

射线 Raycaster

1. 光线投射 Raycaster

光线投射用于进行鼠标拾取(在三维空间中计算出鼠标移过了什么物体)。

光线投射是种线性投射,它的计算方式是:

光线投射的起点是光线的起点,终点是光线的终点。

光线投射的方向是光线的方向,即光线的方向是光线的起点到终点的方向。

2. 鼠标交互

鼠标移动 9-0

报名课程后可查看完整文档

绑定鼠标移动事件: window.addEventListener('mousemove', () => {});

指定交互对象 9-1

报名课程后可查看完整文档

raycaster.intersectObjects([box, sphere]) 指定可交互的对象

鼠标点击 9-2 点击掉落立方体

报名课程后可查看完整文档

3. 碰撞检测

在游戏和交互式应用程序中,碰撞检测是实现物体之间交互和碰撞效果的关键功能。

常见的碰撞检测方法:

  • AABB 碰撞检测: (Axis-Aligned Bounding Box,轴对齐包围盒)碰撞检测是种快速且简单的碰撞检测方法。在该方法中,物体被包围在与坐标轴对齐的立方体框中,即包围盒。这意味着包围盒的每个面与坐标轴平行。适用于在需要进行粗略的碰撞检测或优化性能的情况下
  • 球形碰撞检测: 是种基于球体形状的碰撞检测方法。在该方法中,物体被表示为球体,通过比较球体之间的位置和半径来检测碰撞。球形碰撞检测也可以作为快速的预筛选方法,用于过滤出可能与指定球体相交的物体。在复杂场景中,先使用球形碰撞检测进行初步筛选,然后再使用更准确的碰撞检测算法对可能相交的物体进一步检测。通过使用球形碰撞检测,可以实现简单而高效的碰撞检测。但需要注意,球体形状不一定能够精确地表示物体的真实形状
  • Raycasting 碰撞检测: 是种基于射线投射的碰撞检测方法。在该方法中,通过定义一个起点和方向的射线,判断射线与场景中的物体是否相交,从而实现碰撞检测。常用于处理鼠标拾取、点击交互、碰撞检测以及射线追踪等任务。
  • 物理引擎: 是使用物理模拟引擎对物体之间的碰撞进行模拟和检测的方法。物理引擎通常模拟物体的运动、重力、摩擦等物理属性,并根据这些属性来计算和处理物体之间的相交或碰撞。

    [刚体模拟]:物理引擎会将物体建模为刚体,并在物体之间应用力、速度以及受到的外部紧束条件,以模拟真实世界中物体的运动。

    [连续检测]:物理引擎可以提供连续碰撞检测(Continuous Collision Detection,CCD)功能。这允许检测高速运动的对象与其他对象之间的准确碰撞,以防止它们穿透或忽略细小的碰撞。

    [碰撞响应]:当物体之间发生碰撞时,物理引擎会计算碰撞后的反应,如弹性碰撞(反弹)、摩擦力等。这样可以模拟物体之间的物理相互作用,产生更真实的行为。

    [约束解算]: 物理引擎能够解决约束问题,例如处理物体之间的关节、连接和约束条件。这使得模拟复杂的物理系统(如骨骼、机械臂)变得更为容易。

    比较流行的物理引擎包括 Box2d、Physijs、cannon、ammo.js等

3.1 Raycaster 碰撞检测

Raycaster 碰撞检测

报名课程后可查看完整文档

不够精确, 物体在相交时容易出错

3.2 Box3 包围盒碰撞检测

Box3 包围盒碰撞检测

报名课程后可查看完整文档

只能粗略进行检测

3.3 物理引擎碰撞检测

见第13章物理引擎篇

报名课程后可查看完整文档

Released under the CC BY-SA License.