光線與球之間的相交很容易計算。如果光線的兩端分別是(x1,y1,z1)和(x2,y2,z2),則第一步是將光線引數化:
x=x1+(x2-x1)t=x1+it
y=y1+(y2-y1)t=y1+jt
z=z1+(z2-z1)t=z1+kt
其中0<=t<=1
中心在(l,m,n)半徑為r的球由下式給出:
(x-l)2+(y-m)2+(z-n)2=r2
對x,y,z進行代換得到乙個t的二次方程:
at2+bt+c=0
其中a=i2+j2+k2
b=2i(x1-l)+2j(y1-m)+2k(z1-n)
c=l2+m2+n2+x12+y12+z12+2(-lx1-my1-nz1)-r2
如果這個二次方程的判定值小於零則光線不與球相交。如果判定值等於零則光線插過或與球相切,二次方程的兩個實數根給出相交的前後位置,用t值代入原始方程中科院得到這些點。
只有t的正值是有關的,而t得最小值對應於最靠近光線的起始位置的相交。
另乙個通過相交獲得的資訊是表面法向量(以便計算反射光線和折射光線),j儘管若使用球作為限定體,則只需得到是否出現相交的事實。
如果相交點是(x1,y1,z1),球的中心為(l,m,n),則相交點處的法向量為:
n=(xi-l/r,yi-m/r,zi-n/r)
射線與球的相交性檢測
射線和圓相交,origin是射線起點,dir是射線的方向向量。p0,p1是兩個交點,center為圓心,半徑為r,d為圓心到射線的距離。我們先以2d切面圖來說明,當射線和圓相交的時候,可以看到,球心 center 到射線 ray 的距離 d r,這個即為相交的條件。那麼射線與球相切就轉化為了球心到射...
射線與球的相交性檢測
圖形碼農 2016 07 13 13 37 33 3718 收藏 1 分類專欄 碰撞檢測 從圖形來說 射線和圓相交,origin是射線起點,dir是射線的方向向量。p0,p1是兩個交點,center為圓心,半徑為r,d為圓心到射線的距離。我們先以2d切面圖來說明,當射線和圓相交的時候,可以看到,球心...
光線與包圍盒(AABB)的相交檢測演算法
侵刪 這裡介紹兩種演算法,第一種比較容易理解 下面是cocos2dx中實現ray aabb相交 碰撞 檢測的演算法,說明看注釋 cpp view plain copy print bool ray intersects const aabb aabb const 若射線沿y軸方向有分量 判斷是否與包...