跳到主要内容

判断鼠标是否选中物体

判断鼠标是否选中物体可以转化为——相机与鼠标所连成的射线是否穿过物体所在的平面

已知:

  • 射线
    • 原点:E=(ex,ey,ez){E} = (ex,ey,ez)
    • 方向:V=(vx,vy,vz)\overrightarrow{V} = (vx,vy,vz)
  • 平面
    • 法向量:N=(nx,ny,nz)\overrightarrow{N} = (nx,ny,nz)
    • 平面中任意点:A=(ax,ay,az){A} = (ax,ay,az)
  1. 由于NMA\overrightarrow{N} \bot \overrightarrow{MA}可得(MA)N=0(M - A) \cdot \overrightarrow{N} = 0
  2. 由于EM=λV\overrightarrow{EM} = \lambda \cdot \overrightarrow{V}可得ME=λ×VM=λ×V+EM - E = \lambda \times \overrightarrow{V} \Rightarrow M = \lambda \times \overrightarrow{V} + E
  3. 联立可得 λ=(AE)NVN\lambda = \frac{(A - E) \cdot \overrightarrow{N}}{\overrightarrow{V} \cdot \overrightarrow{N}} M=(AE)NVN×V+EM = \frac{(A - E) \cdot \overrightarrow{N}}{\overrightarrow{V} \cdot \overrightarrow{N}} \times \overrightarrow{V} + E