WEBGL判断鼠标是否选中物体判断鼠标是否选中物体 判断鼠标是否选中物体可以转化为——相机与鼠标所连成的射线是否穿过物体所在的平面 已知: 射线 原点:E=(ex,ey,ez){E} = (ex,ey,ez)E=(ex,ey,ez) 方向:V→=(vx,vy,vz)\overrightarrow{V} = (vx,vy,vz)V=(vx,vy,vz) 平面 法向量:N→=(nx,ny,nz)\overrightarrow{N} = (nx,ny,nz)N=(nx,ny,nz) 平面中任意点:A=(ax,ay,az){A} = (ax,ay,az)A=(ax,ay,az) 由于N→⊥MA→\overrightarrow{N} \bot \overrightarrow{MA}N⊥MA可得(M−A)⋅N→=0(M - A) \cdot \overrightarrow{N} = 0(M−A)⋅N=0 由于EM→=λ⋅V→\overrightarrow{EM} = \lambda \cdot \overrightarrow{V}EM=λ⋅V可得M−E=λ×V→⇒M=λ×V→+EM - E = \lambda \times \overrightarrow{V} \Rightarrow M = \lambda \times \overrightarrow{V} + EM−E=λ×V⇒M=λ×V+E 联立可得 λ=(A−E)⋅N→V→⋅N→\lambda = \frac{(A - E) \cdot \overrightarrow{N}}{\overrightarrow{V} \cdot \overrightarrow{N}}λ=V⋅N(A−E)⋅N M=(A−E)⋅N→V→⋅N→×V→+EM = \frac{(A - E) \cdot \overrightarrow{N}}{\overrightarrow{V} \cdot \overrightarrow{N}} \times \overrightarrow{V} + EM=V⋅N(A−E)⋅N×V+E