freepeople性欧美熟妇, 色戒完整版无删减158分钟hd, 无码精品国产vα在线观看DVD, 丰满少妇伦精品无码专区在线观看,艾栗栗与纹身男宾馆3p50分钟,国产AV片在线观看,黑人与美女高潮,18岁女RAPPERDISSSUBS,国产手机在机看影片

正文內(nèi)容

碰撞檢測教程(c)-資料下載頁

2025-08-05 09:30本頁面
  

【正文】 們需要精確計(jì)算兩個(gè)碰撞多邊形之間的觸點(diǎn)。對于2D來說這并不復(fù)雜,但是在3D場景中會變得非常復(fù)雜。在2D情況下,可以考慮兩種情況,點(diǎn)和邊的相交或者是邊和邊的相交。這個(gè)處理過程幾乎不需要教程,但是它非常適合于一個(gè)可視化的演示這里,我只考慮交疊的情況,這個(gè)原理也適用于碰撞的情況。現(xiàn)在給出一個(gè)碰撞的法向,在點(diǎn)邊接觸的情況下,如何求得觸點(diǎn)?對于接觸點(diǎn)A,它是直接向前的。我們需要調(diào)用一個(gè)支撐映射函數(shù),他將返回多邊形在制定方向上的最低點(diǎn),非常類似于第一個(gè)例子中的CalculateInterval()函數(shù)int FindSupportPoints(const Vectoramp。 N, float t,const Vector* A, intAnum,const Vectoramp。 PA, const Vectoramp。 VA, constMatrixamp。 OA, Vector* S){ Vector Norm = N ^ OA。 float d[32]。 float dmin。 dmin = d[0] = A[0] * Norm。 for(int i = 1。 i Anum。 i ++) { d[i] = A[i] * Norm。 if (d[i] dmin) { dmin = d[i]。 } } int Snum = 0。 const float threshold = 。 for(int i = 0。 i Anum。 i ++) { if (d[i] dmin + threshold) { S[Snum++] = Transform(A[i], PA, VA, OA, t)。 if (Snum == 2) return Snum。 } } return Snum。}這里,函數(shù)的第一部分找到多邊形的最小值。第二部分簡單的找到接近最小值的所有點(diǎn),因此如果碰撞法線垂直于一條邊,將返回兩個(gè)點(diǎn)。這兩個(gè)點(diǎn)將以世界坐標(biāo)存貯,變換函數(shù)將確保多邊形的觸點(diǎn)被轉(zhuǎn)化為世界坐標(biāo),并且如果是一個(gè)未來的碰撞,這個(gè)點(diǎn)將被轉(zhuǎn)化為碰撞時(shí)刻的Vector Transform(const Vectoramp。 Vertex, const Vectoramp。 P, const Vectoramp。 V, constMatrixamp。 xOrient, float t){ // 轉(zhuǎn)換點(diǎn)到世界空間 Vector T = P + (Vertex * xOrient)。 // 在與時(shí)間的碰撞,需要轉(zhuǎn)化為瞬間的碰撞 if(t ) T += V * t。 return T。}對于B上的點(diǎn),你只需要簡單地在反方向找到一個(gè)支撐點(diǎn),在以后的處理中我們需要一對位于兩個(gè)物體上的支撐點(diǎn)來做物理模擬推力并使物體旋轉(zhuǎn),你可以從上圖中發(fā)現(xiàn)在不同的碰撞情況下你需要得到的一對觸點(diǎn)?,F(xiàn)在,調(diào)用FindSupportPoint()函數(shù)在每個(gè)物體上返回一個(gè)或兩個(gè)觸點(diǎn)。在一對一觸點(diǎn)的情況下,不需要做任何事情,現(xiàn)在,還不支持一對一的接觸,但是它能夠非常容易的擴(kuò)展到分離軸算法中。在一對二接觸的情況下,它是一個(gè)簡單的點(diǎn)對邊的碰撞,如上圖中的第一個(gè)圖在二對一接觸的情況下,可以同樣運(yùn)用上述情況,除了物體被交換外在二對二接觸的情況下,他是一個(gè)邊邊碰撞,你需要找到兩個(gè)邊的交疊區(qū)域。首先對于點(diǎn)邊碰撞,在這種情況下,一對碰撞點(diǎn)可以簡單的通過將A上的碰撞點(diǎn)投影到B的邊上來實(shí)現(xiàn),或者說是B的邊上最接近A觸點(diǎn)的點(diǎn)Vector FindClosestPoint(const Vectoramp。 V, const Vectoramp。 A, const Vectoramp。 B, float* pt){ Vector AV = V A。 Vector AB = B A。 float t = (AV * AB) / (AB * AB)。 if (t ) t = 。 else if (t ) t = 。 if (pt) *pt = t。 Vector P = A + t * AB。 return P。}在邊對邊碰撞的情況下,處理過程非常類似。只是你需要沿著沿著碰撞法線的垂直方向排序點(diǎn),并得到兩個(gè)中間點(diǎn)。然后,將它們投影到另外的邊上以便得到一對觸點(diǎn)。有了這些觸點(diǎn),你就可以編寫一個(gè)基本的剛體系統(tǒng),物體將比以前更真實(shí)的相互碰撞并響應(yīng)碰撞。七、動態(tài)剛體為了不浪費(fèi)時(shí)間介紹動態(tài)剛體,可以直接參參見下面的連接:這里,展示了如何在2D游戲中實(shí)施真實(shí)的物理。我將介紹一些我所做的擴(kuò)展,首先,計(jì)算給定凸多邊形的慣量是有技巧的。需要提醒你的是,慣量適用于角度變化,質(zhì)量適用于線形變化。較高的慣量對應(yīng)于較大的質(zhì)量,在這種情況下物體將很難旋轉(zhuǎn)。相反,較小的慣量使得物體的角速度更易改變。質(zhì)量和慣量是有聯(lián)系的,因?yàn)樗鼈兌家蕾囉隗w積,密度和物體的平衡,下面的連接給出了一些參考一句話,計(jì)算慣量的公式為:這里:M是質(zhì)量,N是頂點(diǎn)數(shù),Pn是多邊形的一個(gè)頂點(diǎn),||..||表示求模運(yùn)算。在2D中表示向量的長度??梢允褂孟旅娴墓礁鶕?jù)組成多邊形材質(zhì)的密度來計(jì)算慣量這里:P是密度,N是頂點(diǎn)數(shù), Pn是多邊形的頂點(diǎn), ||..||表示求模,從上述方程中,你可以推理出計(jì)算質(zhì)量的等式。該系統(tǒng)的其它模式是處理交疊。這可以避免一個(gè)物體陷入另一個(gè)物體,因?yàn)槭褂猛屏τ?jì)算在低速的時(shí)候是非常不精確的。為了解決交疊問題,即簡單的方法是沿著碰撞法線根據(jù)碰撞深度將物體推開。當(dāng)然只有在檢測到交疊的時(shí)候才使用它。為了使它更為精確,物體的移動應(yīng)該依賴于它們質(zhì)量的比率,因此較輕的物體應(yīng)該移動更多,而較重的物體移動較少,當(dāng)然具有無窮大質(zhì)量的物體是不會移動的。至于摩擦力,基本的是動態(tài)摩擦力,它將沿著物體速度的反向添加一個(gè)力,大小為||u*Jn||其中u是動摩擦系數(shù)Jn是壓力。靜態(tài)摩擦力總是比較簡單的模型。我選則的靜態(tài)摩擦力的模型是將物體與一個(gè)不可見的物體在碰撞平面上發(fā)生碰撞。正碰撞的計(jì)算是非常簡單的。碰撞力的方向是速度的反向,觸點(diǎn)的速度會被抵消(基本上,恢復(fù)系數(shù)稍微比1大)好了,剩下的部分就按照Chris Hecke的教程。物體翻轉(zhuǎn),碰撞,做一系列瘋狂的事情,并且看起來非常的真實(shí)。
點(diǎn)擊復(fù)制文檔內(nèi)容
畢業(yè)設(shè)計(jì)相關(guān)推薦
文庫吧 www.dybbs8.com
備案圖鄂ICP備17016276號-1