日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

碰撞检测经典解决方案

發(fā)布時間:2023/12/20 编程问答 68 豆豆
生活随笔 收集整理的這篇文章主要介紹了 碰撞检测经典解决方案 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.




??????? 碰撞檢測在3D游戲中至關(guān)重要,好的碰撞檢測要求人物在場景中可以平滑移動,遇到一定高度內(nèi)的臺階可以自動上去,而過高的臺階則把人擋住,遇到斜率較小的斜坡可以上去,斜率過大則把人擋住,在各種前進(jìn)方向被擋住的情況下都要盡可能地讓人物沿合理的方向滑動而不是被迫停下。在滿足這些要求的同時還要做到足夠精確和穩(wěn)定,防止人物在特殊情況下穿墻而掉出場景。


???????碰撞檢測做得好了是應(yīng)該的,不易被人注意到,因為這符合我們?nèi)粘I钪械某WR。做得差了卻很容易讓人發(fā)現(xiàn),人物經(jīng)常被卡住不能前進(jìn)或者人物穿越了障礙。所以大部分人都覺得寫碰撞檢測代碼是件吃力不討好的事情,算法復(fù)雜、容易出bug、不容易出彩。下面還是回到正題,看看我們該如何解決這個難題。

???????早期3D游戲的碰撞檢測多數(shù)基于格子或者BSP樹,基于格子的系統(tǒng)實現(xiàn)簡單但精度不夠,不屬于嚴(yán)格意義的3D碰撞檢測。基于BSP樹的碰撞檢測一度十分流行,算法基本已經(jīng)成熟定型,但它的固有缺點卻使它不太適合現(xiàn)在的游戲。BSP樹需要很長的預(yù)處理時間不適合加載時計算,BSP劃分經(jīng)常會產(chǎn)生原多邊形數(shù)三到四倍的多邊形,考慮到不用保存法線、顏色、uv等信息也要增加將近一倍的資源容量,在一個大的游戲中將模型資源的容量從200M增加到400M相信是大部分人都不愿接受的。目前對于任意復(fù)雜三角形集合(mesh)的碰撞檢測多數(shù)基于BVTree(bounding?volume tree),具體可以是aabb tree,obb tree或者K-dop tree,這也是當(dāng)今各種物理引擎和碰撞檢測引擎流行的做法。

?????? 上面是碰撞檢測按數(shù)據(jù)結(jié)構(gòu)不同的分類,按檢測方式又可以分為離散點的碰撞檢測和連續(xù)碰撞檢測(CCD continuous collisiondetection)。離散點的碰撞檢測是指定某一時刻T的兩個靜態(tài)碰撞體,看它們之間是否交迭,如果沒有交迭則返回它們最近點的距離,如果交迭則返回交迭深度,交迭方向等。連續(xù)碰撞檢測則是分別指定在T1、T2兩個時刻兩個碰撞體的位置,看它們在由T1運動到T2時刻的過程中是否發(fā)生碰撞,如果碰撞則返回第一碰撞點的位置和法線。連續(xù)碰撞檢測是最為自然的碰撞檢測,可以大大方便碰撞響應(yīng)邏輯的編寫,可以很容易避免物體發(fā)生交迭或者穿越。離散點的碰撞檢測則沒有那么友好,當(dāng)檢測到碰撞時兩個物體已經(jīng)發(fā)生了交迭,如果其中有三角形網(wǎng)格對象那么已經(jīng)有許多三角形發(fā)生了交迭,如何將兩個交迭的對象分開并按合理的方式運動是一個挑戰(zhàn)。雖然連續(xù)碰撞檢測是最自然的方式,但它的實現(xiàn)非常復(fù)雜,運算開銷也很大,所以目前大部分成熟的物理引擎和碰撞檢測引擎還是采用了基于離散點的碰撞檢測,為了避免物體交迭過深或者彼此穿越,它們都要采用比較小的模擬步長。

???????由于碰撞檢測引擎的復(fù)雜性和對效率的高要求,我們應(yīng)該盡量使用目前成熟的完整引擎,而不是自己去開發(fā)。經(jīng)過評估,我決定采用Opcode碰撞檢測引擎來做游戲中人物和場景的碰撞檢測。Opcode的主要功能是用aabb tree管理復(fù)雜三角形集合來和射線、球體,立方體,另一個三角形集合等進(jìn)行離散點上的碰撞檢測,如果檢測到交迭則返回所有發(fā)生交迭的三角形。Opcode的特點是高度的內(nèi)存使用優(yōu)化和極好的效率,ODE物理引擎底層就采用它來做復(fù)雜三角形mesh的碰撞檢測,Opcode的作者也是NovodeX(PhysX前身)物理引擎的核心開發(fā)人員,據(jù)說NovodeX采用了Opcode的一個更優(yōu)化版本。由此可見Opcode的成熟與效率。

???????確定了要使用的引擎,下面要討論的算法就和具體引擎無關(guān)了,適合于任何離散點的碰撞檢測引擎。我們用AABB包圍盒來代表場景中的人物,看看如何實現(xiàn)文章開頭所提出的效果。

????????首先解釋一下檢測地面的方式,沿人物包圍盒的四條豎邊向下投四條射線,射線的終點略低于人物的腳底(也就是說射線的長度是有限的),如果與場景發(fā)生碰撞并且碰撞平面的斜率小于某一值則取得碰撞點的高度,否則視為這條射線沒有檢測到地面。將所有射線檢測到的地面高度最大值作為最后的地面高度,如果四條射線都沒有檢測到地面則認(rèn)為人物懸空。

?vD = 當(dāng)前幀人物位移

p0 = 人物包圍盒中心當(dāng)前位置

bOnGroundP1; // 人物是否站在地面

bOnGroundP3; // 人物是否站在地面

bOnGround; // 人物是否站在地面

?

p1 = p0 + vD

在p1位置檢測地面

if( 檢測到地面 )

{

???? 將包圍盒下放到地面得到位置p2

????bOnGroundP1 = true;

}

else

{

???? p2 = p1;

????bOnGroundP1 = false;

}

測試p2點的包圍盒是否與場景交迭

if( 交迭 )

{

???? 取得所有交迭三角形的法線,將它們相加后取平均值,得到法線normal

???? 將法線與向上的向量叉乘得到切線方向tangent

???? // 計算人物沿切線滑動后的位置,注意這里用p0做計算。

???? // 如果要使滑動更平滑可以把p0向法線方向推出一些

???? // p3 =p0 + normal * 0.1f + vD.Dot(tangent);

???? p3 = p0 +vD.Dot(tangent);?

?

???? 在p3位置檢測地面

???? if( 檢測到地面 )

???? {

????????將包圍盒下放到地面得到位置p4

???????? bOnGroundP3 = true;

???? }

???? Else

???? {

????????p4 = p3;

???????? bOnGroundP3 = false;

???? }

?

???? 測試p4點的包圍盒是否與場景交迭

???? if( 交迭 )

???? {

????????測試p1點的包圍盒是否與場景交迭

????????if( 交迭 )

????????{

?????????????// 無法得到合理的移動位置,人物位置保持不變

?????????????// 等待下一幀玩家調(diào)整前進(jìn)方向再做測試

?????????????將p0作為人物的新位置

?????????????bOnGround = true;

?????????????return;

????????}

????????else

????????{

?????????????將p1作為人物的新位置

?????????????bOnGround = bOnGroundP1;

?????????????return;

????????}

???? }

???? Else

???? {

????????將p4作為人物的新位置

????????bOnGround = bOnGroundP3;

???????? return;

???? }

}

else

{

???? 將p2作為人物的新位置

????bOnGround = bOnGroundP1;

???? return;

}

?

上面的算法基本達(dá)到了文章開頭所提到的效果,在某些復(fù)雜情況下人物移動還有些不流暢,但沒有發(fā)現(xiàn)人物有穿越障礙物的現(xiàn)象。在大部分情況下人物的新坐標(biāo)都會由p2點返回,最壞情況是人物被卡住返回p0點。在P4 3.0G的機(jī)器上可以支持120個人物在最壞情況下保持30幀的游戲幀數(shù)。

?

?

?

在使用廣義碰撞階段迅速排除了大量物體以后,將會使用精確到多邊形級別的精確碰撞,比如兩個凸包之間的碰撞,凸包和面片之間的碰撞,以及2次曲面和多邊形面片的碰撞,在游戲中常用的兩次曲面有,橢圓體,圓柱體,膠囊,球體等等。對于兩個凸包之間的碰撞算法目前比較流行的是SAT,分離軸測試算法可以靜態(tài)和動態(tài)的計算出兩個凸包之間的碰撞時間法向量等等。但是對于面數(shù)較多的凸包以及2次曲面卻不大適合,此時一般使用GJK算法但是GJK算法本身強(qiáng)壯性的實現(xiàn)問題一直是一個較難的問題。在我的一項使用BSP進(jìn)行碰撞檢測的實驗中,人物以膠囊來模擬,房屋內(nèi)部通過非SOLID?的LEAFY BSP來構(gòu)造,在使用BSP剔除了大量面片以后,遇到這樣一個問題:如何在最后篩選下的三角形面片進(jìn)行碰撞測試,以確定碰撞發(fā)生的時間,法向量等。

本文提出一種簡單,易懂,準(zhǔn)確的方法用來確定一個以速度v前進(jìn)的膠囊和一個凸多邊形第一次發(fā)生碰撞的時間。

首先一個膠囊是所有到某根線段的距離等于某個值r的點的集合:




如圖:虛線表示該線段這里以ab表示,r代表所有點到該線段的長度:

首先觀察靜態(tài)情況下的碰撞情況。當(dāng)一個多邊形面片和膠囊碰撞的時候,實際上是該多邊形面片中存在一些點,這些點到線段ab的距離小于了r,這是因為在膠囊外部的點到線段ab的距離均大于r(膠囊是所有到某根線段的距離等于某個輸r的點的集合)。所以在兩個物體都靜止的情況下相交測試實際上是測試線段ab到多邊形的最短距離,如果該距離<R那么存在碰撞,否則不存在碰撞:



如圖這里以一個三角形為例子,左圖中該三角形的所有點到線段ab的距離均大于r所以和該膠囊不相交,而右圖中三角形的黑色區(qū)域中的點到線段ab的距離小于r所以該三角形和膠囊相交。

所以實際上只要計算一條線段到某個多邊形的距離,然后和r作比較就可以知道是否發(fā)生碰撞。而一條線段和一個多邊形的距離計算,需要分以下幾個步驟(以三角形為例)

A將線段ab的2個端點投影到三角形所在平面,并檢查投影點是否落在三角形內(nèi)部,如果是的話將該投影距離作為一個候選值

B分別計算線段ab和三角形的三條邊的最短距離點對,并檢查該點對中的點是否落在線段中(ab線段和三角形的邊線段中)如果是的話將該點對的距離作為一個候選值。

C分別計算線段ab的兩個端點到三角形每條邊的投影(實際上是計算最近點對),并檢查該投影是否落在邊的線段中如果是的話作為一個候選值保存。

D分別計算三角形的3個頂點到線段ab上的投影,并檢查該投影是否落在線段ab中。如果是的話作為一個候選值保存。

E 分別計算三角形的3個頂點到線段ab的兩個頂點,把距離作為候選值保存。

這樣一來碰撞檢測就歸結(jié)為,點和線段,線段和線段,以及點和面的最短點對的計算了,

最后將上述的候選值進(jìn)行比較,結(jié)果最小的那個就是三角形中到線段ab的距離。

上述方法非常容易推廣到動態(tài)的情況也就是:當(dāng)膠囊以速度v運動時第一次和三角形發(fā)生碰撞的時間。問題歸結(jié)為在哪個時間T線段ab到三角形的距離等于半徑r,而這又歸結(jié)為上述A,B,C,D,E 5個子問題。如果能夠分別求出這5個子問題的時間,t1,t2,t3,t4,t5那么取這5個時間中的最小值就是膠囊和三角形發(fā)生碰撞的確切時間了。

下面以兩條直線,一條靜止,另外一條以速度v移動作為例子,來說明求得時間的過程。問題等同于:

給定一條靜止,另外一條以速度v移動的直線,求出在哪個時間T這兩條直線的距離等于半徑r。

對于兩條直線,假設(shè)直線的方程分別為:

L1:P1+r1*t;

L2:P2+r2*t;

現(xiàn)在架設(shè)直線L2以速度v={vx,vy,vz}移動;

根據(jù)兩條直線的距離公式

d=|P1P2 .(r1Xr2)| /|(r1Xr2)|

其中P1P2是向量代表 P2-P1,X代表叉積,.代表點積

由于r1,r2是常量不會隨著直線的移動而改變,這里令(r1Xr2)=r={x*,y*,z*}

P1={x1,y1,z1}不變,P2={x2+vx*t, y2+vy*t, z2+vz*t}其中t代表時間是個變量

帶入公式d=|P1P2 .(r1Xr2)| /|(r1Xr2)|可得

d(t)=x*(x2-x1)+y*(y2-y1)+z*(z2-z1)+(x*vx+y*vy+z*vz)t

令(x*vx+y*vy+z*vz)=a; x*(x2-x1)+y*(y2-y1)+z*(z2-z1)=b;

那么d(t) = at+b -----------------------------(1)

公式1就是兩條直線之間的距離隨著時間t變化的函數(shù),這是一個帶符號的距離,兩邊平方可得 d^2(t)= (at+b)^2

這是一個兩次方程,假設(shè)膠囊半徑為r 那么只要求解方程(at+b)^2=r^2這個方程就可以求出子問題B的時間了,同時注意計算出時間t之后還需要計算出該時間兩條直線的線最近點對是否都處在兩條對應(yīng)的線段上,如果是的話才是一個合理的時間否則就拋棄該時間。

通過同樣的推導(dǎo)可以分別求出其他子問題的時間取這些時間,取這些時間的最小值就是碰撞第一次發(fā)生的時間,當(dāng)然在求解2次方程過程中要考慮到delta<或者=0的情況這些情況都有自己的物理意義,以上面兩條線段距離為例d^2(t)= (at+b)^2中如果a=0

那么方程恒等于b^2,考察a=0的物理意義,a=0也就是(x*vx+y*vy+z*vz)=0;其中x*,y*,z*是這兩條直線所組成的面的法向量

這表面移動速度平行于這兩條直線所組成的面。顯然距離是恒定不變的。



結(jié)論:

以上方法很容易推廣到凸多邊形,以及求出碰撞的法向量(根據(jù)最短時間是由上述A,BCDE中那種情況所引起的)。

在一般網(wǎng)游的室內(nèi)環(huán)境檢測中,使用膠囊模擬人物已經(jīng)足夠了,結(jié)合BSP的漂亮剪枝能力,可以做出比較滿意和快速的碰撞檢測,人物和其他物件的碰撞可以采用凸包比較或者GJK方法等。

?

?

?

?

周末一天沒事寫個游戲,好簡單的,里面的亮點是碰撞檢測代碼,是我在國外論壇上看到的一個算法,算是很強(qiáng)的了.下面我貼出來,然后講一下大致思路,關(guān)于游戲的代碼就不貼了,一大串的看了也心煩?^^"
點擊瀏覽該文件
這個函數(shù)就是碰撞檢測的關(guān)鍵,我給它啟名叫 "描邊"
首先里面兩個參數(shù),第一個pmc就是要描邊的mc,第二個num是要描的級數(shù)(等下會解釋到),我們先可以先看下里面的逐句解釋


function doFigure(pmc, num) {//為pmc建立一個數(shù)組,數(shù)組的大小是num*2;pmc.point = new Array(num*2);//從pmc的長和寬中取大的,然后除以2var mx = Math.max(pmc._width, pmc._height)/2;//把360℃num等分var inc = 360/num;// 定義兩個變量等下用var n = 0;var i = 0;// while循環(huán)的次數(shù)為 i<num*2;while (i<(num*2)) {//從下面n+=inc知道?xs和ys就是每一個等分上x和y的所指的方向var?xs = Math.cos((n*Math.PI)/180);var ys = Math.sin((n*Math.PI)/180);//以pmc的(x,y)點為定點,半徑為mx的一個圓的軌跡var?x = pmc._x+(mx*xs);var y = pmc._y+(mx*ys);//如果x,y沒有接觸到pmc上,不斷循環(huán)while?(!pmc.hitTest(x, y, true)) {// x,y分別減x -= xs;y -= ys;//如果都小于0,就break跳出循環(huán)if?(x<0 && y<0) {break;}}//把此時的x和y,分別計入point數(shù)組中pmc.point[i]?= x-pmc._x;pmc.point[i+1] = y-pmc._y;n += inc;i += 2;}}

?

他這么做到底什么意思呢?
其實point里面就是記錄了,一個圖形的邊緣的坐標(biāo).他是怎么做到的?
我們拋開所有從最里面的while循環(huán)講起吧.
while的條件是,當(dāng)(x,y)點沒有接觸到pmc的時候,就不斷循環(huán),循環(huán)的內(nèi)容是?x-=xs,y-=ys;
如果我們前面什么也沒看,應(yīng)該可以想象,一開始(x,y)點一定在pmc的右邊,然后不斷的減一個數(shù)值xs,ys,直到減到x,y碰到pmc為止,這樣,x,y就是pmc上的一點坐標(biāo)了.
但是我們目前還不知道x和y是怎么定義的,還有就是xs和ys怎么來的
往上看

var xs = Math.cos((n*Math.PI)/180);
var ys = Math.sin((n*Math.PI)/180);
var x = pmc._x+(mx*xs);
var y = pmc._y+(mx*ys);

數(shù)學(xué)好的,一看就看出來了,這是圓的極坐標(biāo)公式,就是以pmc的(x,y)為定點,mx為半徑的圓的軌跡.
看到這里,應(yīng)該可以猜到,一定是讓一些點以圓的方式出現(xiàn)在mc的周圍,然后每個點往mc靠攏,知道每個點都靠到mc上面.
這樣我們只要解決這個圓的大小問題了,也就是mx的大小,實際上,你把mx定義成一個很大的數(shù)也沒問題,但是這樣做,會浪費很多,對于寫程序的來說,不必要的浪費是不行的^^
那么看上面的

var mx = Math.max(pmc._width, pmc._height)/2;

這里就定下了 mx的大小,也就是從mc的長和寬中找一個較大的出來,這樣可以保證畫出來的圓把整個mc都抱在了里面,大家看到除以2了吧,所以一定能想到?mc 的注冊點一定是在中心哦(這也是關(guān)鍵之一^^)
接著,和定義半徑大小一樣,我們做個360度每一度檢測一下,也是可以的,但是這樣做會很費資源,而且也沒有必要那么精細(xì).
所以才會有一個描邊級數(shù)num,這個級數(shù)就是規(guī)定了,分num個等次來描,來記錄num個點的坐標(biāo).然后就是運用了
隨便畫個形狀,在這個mc中寫下面的代碼,場景上再建立一個mc,命名為mc2
你可以看到,你的描邊級數(shù)越高,每次檢測的就越多,所以盡量減少就可以了,像我游戲里面只定義了10.
其實這只是一個大概的數(shù)據(jù),并不是百分百的描邊,不過這樣已經(jīng)夠用了^^"

?


onClipEvent (load) {numb = 100;_root.doFigure(_name, numb);}onClipEvent (enterFrame) {_root.hit = false;i = 0;while (i < (numb * 2)) {x = points[i] + _x;y = points[i + 1] + _y;if (_root.mc2.hitTest(x, y, true)) {_root.hit = true;break;}i = i + 2;}}onClipEvent (mouseDown) {if (this.hitTest(_root._xmouse, _root._ymouse, true)) {this.startDrag();}}onClipEvent (mouseUp) {this.stopDrag();}

?

數(shù)學(xué)不好,解釋的不太清楚,大家不懂的再發(fā)貼問,我盡量解釋,當(dāng)然也請高手幫忙完善^^!

?

?

?

轉(zhuǎn)】MSDN中關(guān)于OnDrawItem的說明

afx_msgvoidOnDrawItem(intnIDCtl,LPDRAWITEMSTRUCTlpDrawItemStruct);

Parameters

nIDCtl

?????存儲發(fā)送WM_DRAWITEM消息的控件ID,如果是菜單發(fā)送的,nIDCtl的值為0。

lpDrawItemStruct

?????一個指向DRAWITEMSTRUCT結(jié)構(gòu)體的指針,該結(jié)構(gòu)體保存有關(guān)要被繪制的項目與繪制所需要的類型等星系。

Remarks

當(dāng)自繪按鈕(owner-draw button),下拉列表框(combo box),列表框(list?box)視覺屬性,或者菜單發(fā)生變化時,框架為他們的owner調(diào)用該函數(shù)。

DRAWITEMSTRUCT結(jié)構(gòu)的itemAction成員定義了要進(jìn)行的繪制操作行為。該值確定了所需的繪制動作。

在處理完此消息之前,應(yīng)用程序應(yīng)當(dāng)確保由DRAWITEMSTRUCT結(jié)構(gòu)的成員hDC標(biāo)識的設(shè)備上下文還原到默認(rèn)狀態(tài)。

如果上面結(jié)構(gòu)的成員hwndItem指向CButton,CMenu,CListBox或者CComboBox對象,那么就調(diào)用相應(yīng)類的DrawItem虛函數(shù)。重載相應(yīng)類的DrawItem成員函數(shù)來繪制各個項。

?

其他的一些說明:

OnPaint()這個函數(shù)是在已經(jīng)有形的控件上進(jìn)行畫圖的 ? ??
? OnPaint() ?
? { ?
? ? ? 在這里只是畫原控件沒有的圖形 ?
? } ?
? ?
? OnDrawItem()這個函數(shù)是自已去繪畫一個控件,根據(jù)你想要的形狀,圖案.它是建立一個控件的外表而用到的

?

可以這樣理解,OnDrawItem是畫窗口中的子控件的,因為它的入口參數(shù)LPDRAWITEMSTRUCT帶入不同子控件的相關(guān)參數(shù),而且,你得把字控件設(shè)置成“自畫”類型,才會調(diào)用到OnDrawItem,順便說一下自畫,不是所有設(shè)置成自畫類型的控件都會調(diào)用父窗口的OnDrawItem,例如ListBox的自畫,你就必須重載CListBox的DrawItem方法和MeasureItem方法才可以,但象菜單,按鈕等的自畫則會調(diào)用OnDrawItem。OnPaint和OnDrawItem不在一個范疇內(nèi),他是WM_PAINT的響應(yīng)函數(shù),凡是基于CWnd的類都有OnPaint事件發(fā)生,就是說凡是窗口都有WM_PAINT事件發(fā)生。(不知道我理解的對不對)

?

?

?

2009產(chǎn)品創(chuàng)新數(shù)字化峰會征文:基于CAD的碰撞檢測技術(shù)及其在虛擬裝配拆卸系統(tǒng)中的應(yīng)用

1 引言

??? 幾何形體間的碰撞檢測在虛擬裝配和拆卸過程中幾乎無處不在,碰撞檢測的精度決定了虛擬裝配和拆卸的精度,對于目前的商用VR開發(fā)平臺而言,普遍采用多邊形(通常是三角形)描述場景中的任意幾何形體,并通過紋理映射、光照模型來模型物體在真實世界的視覺效果。而多邊形模型首先是面模型,面模型不包括物體的內(nèi)部信息,無法計算由面所組成的體之間的空間干涉情況,只能計算面面之間的相交情況;其次多邊形模型只是對形體幾何的逼近形式,對形體的逼近程度決定了三角形面片數(shù)量的多少,逼近程度越高,三角形網(wǎng)格數(shù)量越多,渲染和碰撞檢測的時間開銷越大;對形體的描述形式?jīng)Q定了基于多邊形網(wǎng)格的碰撞檢測算法難以實現(xiàn)物體間的精確碰撞檢測。

??? 精確的碰撞檢測首先要保證模型是精確的,其次要保證碰撞檢測算法要基于精確模型之間的空間相交求解。在目前一些大型的商用CAD軟件中,如UG、Pro/E等,不僅采用初等解析曲面和樣條曲面定義幾何物體的外形輪廓曲面,而且采用的是體模型,能夠準(zhǔn)確定義幾何物體的內(nèi)外部空間,同時其提供的靜態(tài)干涉檢查功能和算法是成熟的,分析時間是高效的,本文通過把商用CAD系統(tǒng)提供的干涉檢查功能無縫集成到定制開發(fā)的虛擬裝配和拆卸系統(tǒng)中,一方面能夠?qū)崿F(xiàn)形體間的精確碰撞檢測,同時能夠快速地繪制場景以實現(xiàn)交互,并進(jìn)一步通過采用諸如包圍盒等方式構(gòu)造合適的精確碰撞檢測加速策略,快速排除大量不會發(fā)生碰撞的物體對,降低復(fù)雜場景中進(jìn)行精確碰撞檢測的開銷,提高虛擬裝配/拆卸系統(tǒng)的實時性。

2 總體技術(shù)方案

??? 目前商用的VR開發(fā)平臺均不提供基于CAD幾何模型的精確碰撞檢測功能,而只提供基于多邊形相交測試的碰撞檢測功能,不僅碰撞檢測精度難以提高,而且由于難以判別包容干涉、接觸干涉、硬干涉三種之間的區(qū)別,對于虛擬裝配和拆卸過程中廣泛存在的對齊、貼合、相切等情況難以得到正確的碰撞檢測結(jié)果,從而影響系統(tǒng)對這類情況做出正確的反應(yīng)。

??? 通過深入的研究和程序開發(fā),本文在VR環(huán)境中實現(xiàn)了基于CAD幾何模型的快速精確碰撞檢測功能,圖1是系統(tǒng)結(jié)構(gòu)框圖。

??? 從圖中可以看出,CAD模型是聯(lián)系前臺的場景展示和后臺的碰撞檢測計算的紐帶,一方面,基于CAD的精確碰撞檢測平臺在后臺對CAD模型進(jìn)行空間干涉計算,另一方面,前臺根據(jù)CAD模型動態(tài)生成場景圖并進(jìn)行繪制以用于用戶交互,從而將仿真的三維顯示和仿真計算分離。當(dāng)場景中的幾何對象發(fā)生運動時,通過在二者之間建立的通訊技術(shù)同步更新運動的幾何對象在場景中的幾何方位并保持一致。幾何對象運動過程中的干涉計算采用離散時間步的方法進(jìn)行計算,即:幾何對象運動時,在場景中以一定的時間間隔步進(jìn),同時把該物體運動后的空間方位通過通訊傳遞給后臺用于計算的CAD碰撞檢測平臺,在后臺同步更新運動部件的空間方位后,與其它部件在該時刻進(jìn)行靜態(tài)的碰撞干涉計算,然后得到并分析計算結(jié)果,并把計算結(jié)果通過通訊計算傳遞到前臺VR環(huán)境控制端,如果部件間沒有發(fā)生干涉,則繼續(xù)進(jìn)行下一個步進(jìn)動作,否則在場景中發(fā)出干涉信號并做出相應(yīng)的反應(yīng)。這樣只要步進(jìn)的距離或角度足夠合理,可以獲得幾何對象運動過程中可能發(fā)生的任何干涉情況。

圖1系統(tǒng)結(jié)構(gòu)框圖

3 關(guān)鍵技術(shù)

??? 3.1基于CAD的精確碰撞檢測算法及其程序?qū)崿F(xiàn)

??? CAD交互界面下的干涉檢查功能無法實現(xiàn)批量自動化處理,顯然無法集成到定制開發(fā)的VR系統(tǒng)中去,為此,必須找到脫離CAD交互運行界面的程序自動化計算方法。通常而言,高端商用CAD系統(tǒng)提供有二次開發(fā)包,在其開發(fā)包上進(jìn)行二次開發(fā)有望實現(xiàn)干涉檢測的程序自動化處理。

??? UG NX是高端CAD系統(tǒng),其提供的二次開發(fā)工具NX/Open功能強(qiáng)大,在NX/Open的基礎(chǔ)上能夠開發(fā)實現(xiàn)任意幾何對象之間的精確碰撞檢測的自動計算。

??? 使用NX/Open的進(jìn)行干涉檢查分析的步驟如下:

??? 1)創(chuàng)建一個間隙分析數(shù)據(jù)集,分配空間并設(shè)置相關(guān)屬性

??? 2)設(shè)置間隙分析模式,允許采用實體模型或多邊形網(wǎng)格模型進(jìn)行干涉檢查。

??? 3)設(shè)置間隙分析規(guī)則,設(shè)置需要排除的干涉檢查對。

??? 4)設(shè)置間隙分析中用于分析的幾何對象。

??? 5)進(jìn)行間隙分析,對上面的設(shè)置進(jìn)行干涉分析。

??? 6)對計算結(jié)果進(jìn)行分析。從計算結(jié)果中找到發(fā)生硬干涉的物體對以及干涉區(qū)域。

??? 使用NX/Open進(jìn)行干涉檢查的計算結(jié)果的干涉類型分為如下4類:

??? 1)不干涉:幾何對象間沒有發(fā)生干涉;

??? 2)包容干涉:一個幾何對象在另一個幾何對象內(nèi)部;

??? 3)硬干涉:兩個幾何物體在三維空間存在空間位置重疊并且存在相交的空間曲面;

??? 4)接觸干涉:兩個幾何物體在三維空間存在點或空間曲面接觸,但不存在公共的實體空間;

??? 通過對干涉計算結(jié)果進(jìn)行分析,可以得到任意兩個幾何對象間的準(zhǔn)確的空間干涉情況。

??? 3.2基于CAD的VR場景圖動態(tài)生成技術(shù)

??? 商用VR開發(fā)平臺不能識別并繪制CAD模型,商用的VR開發(fā)平臺通常只支持多邊形網(wǎng)格模型,而CAD模型是由參數(shù)曲面組成的三維實體模型,為了在VR開發(fā)平臺下渲染CAD模型,必須根據(jù)CAD模型的層次結(jié)構(gòu)動態(tài)生成VR場景圖對象。

??? 根據(jù)CAD模型動態(tài)創(chuàng)建VR場景圖的關(guān)鍵在于把CAD參數(shù)曲面轉(zhuǎn)換為某張逼近程度的多邊形網(wǎng)格模型,并按照規(guī)定的層次和結(jié)構(gòu)組合成一顆場景樹。

??? 對于一個UG裝配文件,采用如下方式組織VR場景圖(VR開發(fā)平臺采用Vega?Prime):

??? 1)在Vega Prime場景圖根節(jié)點上創(chuàng)建一個vpObject組節(jié)點,UG裝配文件根節(jié)點對應(yīng)于該組節(jié)點。

??? 2)對于UG裝配中的每一個部件,在Vega Prime場景圖中創(chuàng)建一個vpTransform節(jié)點,并把該節(jié)點作為第一步創(chuàng)建的vpObject節(jié)點的子節(jié)點。根據(jù)該部件在裝配中的空間方位矩陣定義一個vpTransform節(jié)點中的方位矩陣,如果該部件是零件模型,則創(chuàng)建一個vsGeometry節(jié)點,并把該節(jié)點作為vpTransform的子節(jié)點;如果該部件仍然是一個裝配模型,則再創(chuàng)建一個vpTransform節(jié)點,并把該節(jié)點作為上一級vpTransform的子節(jié)點,把該vpTransform節(jié)點作為父節(jié)點遞歸調(diào)用步驟2;

??? 通過如上步驟,建立了與CAD模型層次結(jié)構(gòu)類似的Vega Prime場景圖結(jié)構(gòu)。

??? CAD幾何模型到多邊形網(wǎng)格模型的轉(zhuǎn)換需要借助于具體的參數(shù)曲面離散和多邊形網(wǎng)格剖分算法,對于不同類型的的參數(shù)曲面,曲面離散和多邊形網(wǎng)格剖分算法復(fù)雜程度不同,文獻(xiàn)[1]對此有詳細(xì)的描述。

3.3 可視化前端與后臺計算端的幾何對象空間方位同步機(jī)制

??? 由于用于用戶交互的可視化前端繪制的是由參數(shù)曲面離散生成的多邊形網(wǎng)格,而后臺碰撞檢測計算采用的是最初的CAD模型,為了保證碰撞檢測結(jié)果的正確性,必須保證這兩個環(huán)境中的部件在任意時刻的空間相對方位保持一致。基于CAD的VR場景圖動態(tài)生成技術(shù)保證了在初始時刻二者在空間方位上的一致性,同步機(jī)制需要保證在任意時刻運動部件在二者當(dāng)中具有同樣的運動特性。采用如下步驟保證二者中的幾何對象空間方位的一致性:

??? 1)在Vega Prime場景圖節(jié)點對象和CAD中的幾何對象之間建立一一映射關(guān)系,只有建立了一一映射關(guān)系,才有可能當(dāng)用戶在交互界面中選擇并移動或旋轉(zhuǎn)了某個幾何對象時,系統(tǒng)才能指導(dǎo)該幾何對象對應(yīng)于CAD中的哪一個幾何對象,并進(jìn)行相應(yīng)的平移或旋轉(zhuǎn)。

??? 2)定義一個結(jié)構(gòu),該結(jié)構(gòu)用于描述平移或旋轉(zhuǎn)的類型及所有參數(shù)以及碰撞檢測結(jié)果,變換的類型及參數(shù)用于在CAD計算端進(jìn)行同樣的變換操作,碰撞檢測結(jié)果用于指示可視化前端進(jìn)行相應(yīng)的響應(yīng)。該結(jié)構(gòu)定義如下:

??? Struct CommunicationData{
??? Tag_t motionprt;? //當(dāng)前運動的幾何對象
??? Unsigned int motiontype;? //0代表平移,1、2、3分別繞xyz軸旋轉(zhuǎn)
??? Double translate[3];? //代表進(jìn)行平移的坐標(biāo)值
??? Double angle;? //代表旋轉(zhuǎn)的角度值
??? BOOL bIsCollision;? //代表是否發(fā)生空間干涉 }
???
??? 3)當(dāng)可視化前端選中某個幾何對象并進(jìn)行相應(yīng)的運動后,填充CommunicationData中的數(shù)據(jù)并傳遞到CAD計算端,CAD計算端根據(jù)旋轉(zhuǎn)或平移的大小重新計算運動部件在CAD場景中的方位矩陣,最后采用UF_ASSEM_reposition_part_occurrence或者UF_ASSEM_reposition_instance函數(shù)把運動部件放置在新的位置。

??? 4)CAD端計算運動部件在新的方位處與其它部件之間的空間干涉情況,如果干涉計算結(jié)果為硬干涉,則發(fā)生空間干涉,填充CommunicationData結(jié)構(gòu)中的bIsCollision域并通知可視化前端,可視化前端獲取該值并做出相應(yīng)的反應(yīng)。

???3.4 碰撞檢測加速策略

??? 層次包圍盒方法的基本思想是用體積略大而幾何特性簡單的包圍盒來近似描述復(fù)雜的幾何對象,進(jìn)而通過構(gòu)造樹狀層次結(jié)構(gòu)來逼近對象的幾何模型,直到幾乎完全獲得對象的幾何特性,從而只需對包圍盒重疊的部分進(jìn)行進(jìn)一步的相交測試。層次包圍盒最重要的特點是能夠應(yīng)用于任意形狀的幾何對象的物體的碰撞檢測,因此也是目前應(yīng)用最廣泛的一種碰撞檢測方法。

??? 層次包圍盒樹根據(jù)包圍盒類型的不同又可分為包圍球、AABB、OBB、k-Dop等等,對應(yīng)于每一類的包圍盒都有一個代表性的碰撞檢測算法,包圍盒的示意圖如圖6所示:

??? 表1是對幾種基本包圍盒的碰撞檢測算法的性能比較,沿坐標(biāo)軸的包圍盒AABB(axis-aligned?bounding boxes)是使用的最久也是最廣的包圍盒類型,一個給定對象的AABB被定義為包含該對象且各邊平行于坐標(biāo)軸的最小的六面體。其計算十分簡單,只需分別計算組成對象的基本幾何元素集合中各個元素的頂點的X、Y、Z坐標(biāo)的最大值和最小值即可;兩個AABB相交當(dāng)且僅當(dāng)它們在三個坐標(biāo)軸上的投影區(qū)間均重疊,AABB間的相交測試最多只需要6次比較運算。AABB也是眾多VR開發(fā)平臺廣泛支持的包圍盒類型,為此,本文采用AABB作為選定的包圍盒類型。

??? 本文采用AABB層次包圍盒加基于CAD模型的精確碰撞檢測算法實現(xiàn)碰撞檢測,其中層次包圍盒算法用于快速排除場景中沒有發(fā)生干涉的物體對,對于采用層次包圍盒算法計算后仍然干涉的物體對,用采用基于CAD模型的精確碰撞檢測算法進(jìn)行準(zhǔn)確的碰撞檢測,這樣一方面保證了碰撞檢測結(jié)果的正確性,另一方面能夠大大降低碰撞檢測的時間開銷。


表1基本包圍盒碰撞檢測算法比較

4 應(yīng)用實例及結(jié)論

??? 圖3是在Vega Prime中開發(fā)的原型系統(tǒng)的程序運行界面,在該原型系統(tǒng)中,通過選擇運動部件并設(shè)置運動路徑(平移和旋轉(zhuǎn)),程序通過計算運動部件運動過程中與其它部件的空間干涉情況來判斷該運動過程是否存在干涉,空間干涉的結(jié)果根據(jù)在運動過程中運動部件和非運動部件的UG?CAD模型的空間干涉情況得出。


圖3原型系統(tǒng)運行界面


圖4用于碰撞檢測測試的模型

??? 圖4是用于虛擬安裝測試的模型,需要把紅色部件插入到另一個部件的中心圓孔中(圓孔直徑與紅色物體外徑相同),實際上,在插入圓孔的過程中,它們之間只存在接觸干涉,而不存在空間硬干涉,對此,基于CAD模型的精確碰撞檢測算法可以正確識別,而基于多邊形相交測試的碰撞檢測算法只能把這類情況作為發(fā)生干涉進(jìn)行處理。

??? 表2顯示了在p4 3.4GCPU,4G內(nèi)存和Nvidia?Quadro Fx1400顯卡微機(jī)上進(jìn)行測試時(紅色物體逐步插入圓孔中心,采樣100幀的平均值)不同碰撞檢測算法和時間開銷比較表。


表2幾種碰撞檢測算法計算的平均時間開銷

??? 從試驗結(jié)果可以看出,基于CAD模型的精確碰撞檢測算法可以區(qū)分接觸干涉和硬干涉以及包容干涉之間的區(qū)別,同時可以在很快的時間開銷下完成幾何物體間的精確碰撞檢測,采用層次包圍盒可以進(jìn)一步降低碰撞檢測的時間開銷,而采用基于多邊形一一相交測試的碰撞檢測算法的時間開銷隨著用于碰撞檢測的多邊形數(shù)目的增加而急劇增加。

??? 實踐證明,本文提出的技術(shù)方案切實可行,不僅解決了商用VR開發(fā)系統(tǒng)中碰撞檢測精度難以提高的技術(shù)問題,而且用于精確碰撞檢測的時間開銷能夠滿足工程實際需要。

[參考文獻(xiàn)]

[1] 趙瑛峰,NX Openflight數(shù)據(jù)交換輸出接口開發(fā)技術(shù)研究[J],產(chǎn)品數(shù)字化實踐論文集,電子工業(yè)出版社,2008.5

// 球體-球體的碰撞 Sphere-Sphere Collision ?bool IsCollidingSphereToSphere(){????? // 兩個小球的相對速度????? relative_vel = Sphere2_Vel - Sphere1_Vel;????? r = Sphere1_Radius + Sphere2_Radius;????? relative_position = Sphere2_Center – Sphere1_Center;????? // 檢查兩個小球是否已經(jīng)碰撞????? if ((Sqr_relative_position - (r*r)) &lt;= 0)??????????? return true; ?????? // 提前跳過測試:如果兩個小球朝向遠(yuǎn)離對方的方向移動,則返回false????? float rel_distance = sqrt(Sqr_relative_pos) - (r); ?????? //這里我們需要檢測兩次update之間是否存在碰撞????? if (rel_distance &lt; (sqrt(Sqr_relative_vel)*update_interval))????? {??????????? time_fract = rel_distance/sqrt(Sqr_relative_vel);??????????? time_remain = update_interval – time_fract;??????????? if ((Sqr_relative_pos - (r*r)) &lt;= 0) ???????? {???? return true;? ??????????? }? ??? }? ??? return ((relative_movement * relative_movement - ((Sqr_relative_pos - r*r) -? ??????????? Sqr_relative_vel)) &gt;??????????? 0);} ?// 球體-平面的碰撞 Sphere-Plane Collisionbool IsCollidingSphereToPlane(){????? // 提前跳過測試:檢查小球是否可以在沒有碰撞的情況下移動,????? // 如果可以,則返回false;????? // 如果不可以則檢測球體與平面之間的距離是否為????? for (int i=0; i&lt;6; i++)????? {??????????? // 小球的速度與平面法向量的點積??????????? // 如果點積為,則速度矢量平行與平面,因此不可能碰撞??????????? float unit_normal_vel_dot = normal . velocity;??????????? if (unit_normal_vel_dot &lt; 0.0f)??????????? {????????????????? // 計算平面公式????????????????? float D1 = normal * point_on_plane;????????????????? float normal_pos_dot = normal . center_S;????????????????? // 計算球心到平面的距離????????????????? float distance = (D1-normal_pos_dot)/unit_normal_vel_dot;????????????????? // 這里處理球體已經(jīng)接觸到盒子的情況????????????????? if (distance &lt;= radius1)? ????????????? {? ?????????? ????? collide = true;? ??????????????????? // 存儲這個面的法向量? ??????????? }? ????????????????? break;? ?????????? }? ????????? else? ?????? {? ????????? ????? float Projected = velocity * update_interval;? ?????????????? // 這里處理球體在update_interval時間移動距離x,? ???????????? // 但是x小于球與平面的距離的情況? ?????????????? if (Projected &gt; distance)????? ??????????? {??????????????????????? collide = true;??????????????????????? time_fract = (distance–radius)/velocity;??????????????????????? time_remain = update_interval - time_fract;????????????????? }????????????????? break;??????????? }????? }????? return collide;

?

?

?

?

物移動控制是單機(jī)和網(wǎng)游中比較重要的部分,但前單機(jī)游戲使用動力學(xué)以及IK動畫等已經(jīng)達(dá)到了非常逼真的地步,在大型網(wǎng)絡(luò)游戲中這樣的物理模擬同步是很實現(xiàn)的,因此在目前多數(shù)網(wǎng)游中仍舊是采取使用一個包圍體(盒子或者膠囊)來模擬人物。一個好的移動系統(tǒng)是很重要的,平滑的貼墻滑動以及下滑,跳躍等會帶給玩家順暢的手感否則則會有種奇怪的感覺,本文具體介紹了一下碰撞反應(yīng),包括貼墻滑動等的具體實現(xiàn)細(xì)節(jié)。包括一個demo實例 。
目前物理引擎里面大多自帶獨立于剛體的人物角色控制,但是物理引擎需要特定的物理模型命名以及比較大的物理模擬開銷度。如果需要定制自己的特別功能或者需要簡化計算(同時模擬多個延遲或者玩家的反應(yīng))。就必須自己完成人物碰撞反應(yīng)控制的代碼。
要完成人物發(fā)生碰撞以后的行為控制,需要碰撞檢測系統(tǒng)提供以下的碰撞信息,對于每一個碰撞:
1. 碰撞發(fā)生的時間
2. 碰撞的法向量
3. 碰撞點
對于基本的人物碰撞控制反應(yīng)來說,以上3點是必須的,有時還需要提供和包圍體發(fā)生碰撞的具體三角形信息。

對于場景上的物體首先使用膠囊所在的包圍盒AABB或者OBB和場景中的碰撞體包圍盒作層次碰撞裁減,至于具體怎么組織可以任意,比如可以采用AABB或者OBB樹,也可以采用簡單的球樹。但碰撞進(jìn)行到樹的葉子節(jié)點后開始檢測人物的AABB盒和該AABB盒所包圍的OBJECT的碰撞情況。如果發(fā)現(xiàn)這2個AABB(OBB)盒將會發(fā)生碰撞,那么開始使用人物的膠囊體和景物所帶的三角面片進(jìn)行精確到polygon soup級別的比較。這時候仍舊可以優(yōu)化,比如說我還做了一步把一個Object中的三角形面片打成BSP樹的形式存儲起來,這樣可以大大減少膠囊和三角形碰撞檢測的次數(shù),因為這種動態(tài)檢測是十分耗時的。有關(guān)膠囊和三角形面片的比較可以參考:http://dev.gameres.com/Program/Abstract/Arithmetic/capsule.mht中的方法。?對于BSP的劃分以及AABB碰撞檢測就不用多說了~到處都可以找到文章。
對于地形而言,也是采用同樣的方法,只不過對于地形而言三角形信息不用額外存儲,只需要使用和渲染相同的三角形(對于景物來說一般不會使用渲染用的三角形而會使用更加簡化數(shù)量更少的簡化網(wǎng)格碰撞模型)。這里可以有很多優(yōu)化的技巧,因為地形本身是規(guī)則的cell一個地形是由若干個patch(一般是16X16)組成的,而每個patch是由若干cell(一般是16X16)組成的。對于patch來說一般已經(jīng)組織到了一顆QUADTREE中了因為視棱錐裁減也需要這種結(jié)構(gòu),因此碰撞檢測中的AABB-AABB階段使用這顆已經(jīng)存在的QUADTREE就可以快速的完成層次碰撞檢測了。但發(fā)現(xiàn)某個patch中的AABB和人物的AABB發(fā)生碰撞后需要檢測每一個CELL所在的AABB和人物AABB盒的碰撞,這里可以使用點小技巧比如說首先將AABB盒投影到CELL所在的XY平面上,找出被投影覆蓋的那些CELL然后再檢測這些CELL的AABB盒是否和人物的發(fā)生碰撞。一但確定了某個CELL和人物發(fā)生碰撞那么就可以將該CELL中的三角形取出(一般為2個)依次和人物所在的膠囊進(jìn)行三角形-膠囊的碰撞檢測。
這樣當(dāng)碰撞檢測系統(tǒng)完成任務(wù)以后我們將會獲得一個碰撞信息的數(shù)組:
class CollideInFo{
public:
GFVECTOR_3D m_worldcdnorm;//碰撞法向量
GFPOINT_3D m_worldpoint;//碰撞點
float m_cdtime;//碰撞時間
};

CollideInFo collidearray[];
然后使用這個數(shù)組就可以進(jìn)行碰撞后的處理了包括,沿墻滑動下滑等等。在具體說明整個人物移動控制算法之前,首先說下動態(tài)碰撞檢測和靜態(tài)碰撞檢測的區(qū)別,動態(tài)碰撞檢測是指物體A以速度V前進(jìn)了T時間,在這期間第一次和物體B發(fā)生碰撞的時間。這樣的碰撞檢測必須返回第一次2個物體發(fā)生碰撞的時間。而靜態(tài)檢測是指2個不動的物體是否互相相交對于這種檢測是不需要返回時間的。動態(tài)檢測算法比靜態(tài)的復(fù)雜而且也耗用更多的時間。一個完善的碰撞系統(tǒng)需要解決以上2種碰撞檢測,如果你不想自己寫檢測代碼,目前比較流行的有OPCODE,SOLID庫等檢測庫?。你可以直接使用他們提供的功能,這里我采用的是自己寫檢測代碼的方法,目前只用到三角形-膠囊,AABB-AABB,OBB-OBB的碰撞檢測。 [Page]
完成了包圍體(用的是膠囊)和三角形的碰撞,膠囊和BSP,地形的碰撞檢測之后,擁有了碰撞的信息 1。碰撞時間。2。碰撞法向量。3。碰撞點。接著就可以處理人物在碰撞后的反應(yīng)了。
首先人物的一次移動分2個階段,第一個是初始階段,使用靜態(tài)碰撞檢測獲得該階段的速度(具體做法在后面說)。第2階段使用該速度去做動態(tài)碰撞檢測得到碰撞信息,根據(jù)這些碰撞信息去處理碰撞后的反應(yīng)。
先來看第一階段,過程對于一個膠囊我們需要獲取他周圍的臨近面片的信息,以決定這個膠囊目前所處平面的傾斜度,是否貼著不可通過的墻等等。我采用的方法是將膠囊體略為膨脹一些,然后調(diào)用靜態(tài)碰撞檢測的代碼獲取和該膨脹后的膠囊體相交的三角形面片碰撞信息如圖:
棕色的是原始的膠囊體,紅色的表示將膠囊半徑略為增加以后的膠囊體,藍(lán)色的2個地形是將膠囊膨脹以后所發(fā)生相交的2個三角形,而如果不采用膨脹的話該膠囊是不和任何三角形相交的,具體膨脹數(shù)值可以設(shè)為膠囊下落的最小高度,比如你設(shè)定膠囊離底部物體超過0.6單位屬于騰空狀態(tài)的話你就將膨脹數(shù)值設(shè)為0.6。在這個例子中我們將會檢測到2個碰撞(藍(lán)色部分)這2個碰撞法向量正好是這2個三角面的法向量(在很多情況下也可能不是這個看你的碰撞代碼中法向量是如何計算的了)。其中底部的那個是可行走平面,另外一個是不可行走平面,有了這2個碰撞平面就很簡單了,如果用戶輸入的速度和那個不可行走的平面相反(也就是撞向那個不可行走平面),那么那個不可行走平面是有效的,這樣他和底部那個可行走的平面所組成的交線就是人物的初始速度,如果用戶輸入的速度和那個不可行走的平面法向量相同,那么這個不可行走平面沒有作用人物最終的速度就是把用戶速度投影到該可行走平面上的速度。
0頂一下

具體計算是否能夠水平移動以及移動速度的算法:當(dāng)給出M個不可行走平面和N個可行走平面時:
1首先將速度在N個可行走平面上分解,檢查這些分解的速度是否有效(如何判斷速度有效下面會說道)
2如果在1的時候存在一個有效的速度直接返回該速度
3沒有有效速度,這時檢查NXM個平面的交線,將速度在上面分解同時檢查是否存在有效速度
4如果存在有效速度返回該速度
5否則檢查MXM條交線的,將速度在上面分解同時檢查是否存在有效速度
6如果存在有效速度返回該速度
7否則返回0速度
那么如何判定速度是否有效呢,首先我們知道了所有碰撞的信息,給定一個速度,如果該速度和所有碰撞的法向量的夾角都是小于90度那么這就是個有效速度,(說明該分解后速度不會引起和這些碰撞面的在一次碰撞,因為該速度是將物體拉下遠(yuǎn)離該平面的方向的)。如果只要有一個夾角大于90度那么該速度就是非有效速度,同時在移動時還要判斷該速度的傾斜角是否大于最大下滑傾斜角。注意 5是很重要的因為2個不可行走的平面所形成的交線仍舊可能是可以行走的,甚至是水平的。
以上的部分是檢查是否能夠水平移動的,如果不能水平移動那么該物體會下滑,1如果沒有檢測到碰撞平面說明物體處于騰空狀態(tài),這時候給物體加上重力加速度,產(chǎn)生一個往下的速度和原來的水平速度結(jié)合起來(如果存在)。
如圖棕色是原始狀態(tài)膠囊經(jīng)過上一幀移動后到達(dá)藍(lán)色的位置這時通過上訴算法可以檢測到膠囊騰空,這時他的速度為水平速度(紅色)+下滑速度(綠色)。
2如果檢測到碰撞平面但是平面以及它們的交線都是不可行走的(傾斜角大于可行走角度)那么依次將當(dāng)前速度在碰撞平面分解,以及檢測每一條可能下滑的交線。得出速度后檢測是否是有效速度具體過程和前面檢查水平速度時的方法一樣,只是將速度投影到平面上的方法不一樣具體方法可以根據(jù)程序需要,我這里采用首先去掉原始速度在碰撞平面法線的分量,然后將速度分解為2個速度一個是貼著平面水平移動的速度另外一個是貼著平面下滑的速度。注意如果上一幀更新后物體處于下滑狀態(tài)那么當(dāng)前速度就因該是該下滑速度,否則則是用戶輸入的速度。
如果用戶輸入的速度是跳躍也就是帶Z分量的速度那么,計算初始速度這一步需要略過直接輸入給下一階段用戶起跳的速度。

階段2計算初始速度引起的碰撞

對于多數(shù)情況來說,計算完初始速度就不會再發(fā)生碰撞了,一旦發(fā)生,那么我們依舊傳入碰撞面的那些法向量,碰撞點的信息,同樣采用前面計算初始速度時所采用的方法,計算出碰撞后的調(diào)整速度。 [Page]

整個處理過程基本上就是這樣的,其中可能還會出現(xiàn)一些小問題比如說誤差控制等。總結(jié)一條就是人物行走要么研著平面分解速度要么沿著2個平面的交線行走或者下滑。這個是Demo示例畫面(由于沒有人幫我做動畫。。所以demo中目前只有行走動畫,沒有起跳,下落等動畫。。)

?

?


???????????

再分享一下我老師大神的人工智能教程吧。零基礎(chǔ)!通俗易懂!風(fēng)趣幽默!還帶黃段子!希望你也加入到我們?nèi)斯ぶ悄艿年犖橹衼?#xff01;https://blog.csdn.net/jiangjunshow

總結(jié)

以上是生活随笔為你收集整理的碰撞检测经典解决方案的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。

亚洲黄色在线观看 | 中文在线√天堂 | 成人久久久久 | 国产美女搞久久 | av网站免费线看精品 | 久久精品国产精品亚洲 | 黄色成人av网址 | 天天天在线综合网 | 亚洲精品在线视频 | 激情欧美日韩一区二区 | 中文字幕在线播放日韩 | 久久电影色 | 激情综合五月网 | 美女精品久久 | 久久久久久免费网 | 黄网在线免费观看 | 免费看一级一片 | 国产九九九精品视频 | 97视频久久久 | 国产剧情在线一区 | 99热精品免费观看 | 日韩欧美成 | 最近中文字幕免费大全 | 九色在线 | 国产亚洲情侣一区二区无 | 久久99偷拍视频 | 久久国产电影 | 国产精品久久网 | 免费观看丰满少妇做爰 | 亚洲综合婷婷 | 亚洲综合视频在线播放 | 射久久 | 国产日韩精品一区二区三区 | 91福利影院在线观看 | 欧美日韩精品久久久 | 国产成人精品网站 | 国产一二区在线观看 | 麻豆手机在线 | 98福利在线 | 91精品久久久久久 | 久久av观看 | 精品 激情 | 国产精品影音先锋 | 免费看片黄色 | 国产亚洲欧美精品久久久久久 | 精品在线观看一区二区三区 | 国内成人精品2018免费看 | 日韩免费电影网 | 亚洲成a人片77777潘金莲 | 丁香六月五月婷婷 | 天天躁日日躁狠狠躁av中文 | 91精品视频免费观看 | 成人av电影免费 | 日韩视频免费观看高清完整版在线 | 91成人网页版 | 久草新在线 | 永久免费毛片在线观看 | 欧美精品v国产精品v日韩精品 | 国产一级h | 成人免费观看视频网站 | 中文字幕在线一二 | 免费a现在观看 | 中文字幕在线观看网站 | 国产流白浆高潮在线观看 | 在线免费黄色片 | 日韩资源在线播放 | 国产精品女人网站 | 国产精品欧美一区二区 | 亚洲综合欧美激情 | 最近日本韩国中文字幕 | 国产免费视频一区二区裸体 | 国产精品毛片一区视频播不卡 | 香蕉影院在线播放 | 东方av在| 九九九九精品九九九九 | 在线观看国产www | 国际精品久久久 | 欧美国产在线看 | 精品一二三四在线 | 国产精品一区二区三区电影 | 成人av直播 | 日韩视频一区二区三区 | 精品96久久久久久中文字幕无 | 色偷偷97 | 国产精品久久99综合免费观看尤物 | 国产第页| 日本福利视频在线 | 在线观看亚洲电影 | 在线看小早川怜子av | av电影中文字幕在线观看 | 免费在线黄色av | 国产免费亚洲 | 九九热视频在线免费观看 | 精品亚洲va在线va天堂资源站 | 久久午夜色播影院免费高清 | 日韩黄色免费看 | 亚洲一区二区精品在线 | 中文字幕制服丝袜av久久 | 欧美国产日韩在线视频 | 九九精品毛片 | 99操视频 | 91成人免费在线 | 狠狠五月婷婷 | 99视频国产在线 | 日本aa在线| 国产精品久久久久久婷婷天堂 | 欧美资源在线观看 | 香蕉视频在线免费 | 俺要去色综合狠狠 | 精品视频在线观看 | 日韩高清一二三区 | 91网免费观看| 国产一区二区在线播放视频 | 人人干干人人 | 久草在线 | 五月天六月色 | 五月天综合网 | 欧美日韩在线视频免费 | 国产精品日韩在线播放 | 久久av中文字幕片 | 午夜久久福利影院 | 日韩视频一区二区三区在线播放免费观看 | 国产精品久久久久毛片大屁完整版 | 久久久久欠精品国产毛片国产毛生 | 婷婷色中文字幕 | av大全在线免费观看 | 亚洲人人av| 亚洲精品乱码久久久久久蜜桃91 | 97在线免费观看 | 日本中文字幕观看 | 中文字幕丝袜制服 | 亚洲a资源| 国产一级二级在线播放 | 黄色小说18| 免费黄色特级片 | 久久久综合电影 | 97超碰在线视 | 91成人精品观看 | 国产精品9999久久久久仙踪林 | 97视频入口免费观看 | 国产精品久久久 | 久久久久高清 | 综合天堂av久久久久久久 | 日韩中文字幕免费 | 国产成人久 | 欧美日韩在线播放一区 | 国产一区二区免费 | 欧美资源在线观看 | 91精品国产成人观看 | 一级欧美黄 | 成年人在线电影 | 人人爽人人爽人人爽学生一级 | 国产精品美女视频网站 | 色噜噜在线观看视频 | www.久久婷婷 | 伊人永久 | 天天艹 | 欧美一级在线观看视频 | 91av影视| 久久精品国产一区二区电影 | 亚洲国产av精品毛片鲁大师 | 少妇搡bbbb搡bbb搡忠贞 | av在线播放一区二区三区 | 91成人欧美 | 免费看毛片在线 | 福利二区视频 | 日韩精品在线观看视频 | 中文字幕超清在线免费 | 99在线精品视频在线观看 | 国产免费一区二区三区最新 | 日韩高清无线码2023 | 992tv在线观看网站 | 精品你懂的 | 九九在线精品视频 | 日本精品久久久一区二区三区 | 久9在线 | 久久成人麻豆午夜电影 | 一本—道久久a久久精品蜜桃 | 中文字幕国产精品 | 欧美激情视频一二三区 | 一区二区三区精品在线 | 亚洲视频播放 | 91麻豆网| 婷婷丁香花 | 精品久久久久久久久久岛国gif | av在线直接看 | 九色91av | 日韩一二三 | 天天操天天舔天天干 | 天天做天天爱天天综合网 | 一区二区三区高清不卡 | 国产一区二区三区高清播放 | 日韩欧美在线免费 | 久久理伦片| 久久婷婷综合激情 | 久久久久久国产一区二区三区 | 久久久久久久亚洲精品 | 国产精品一区在线观看你懂的 | 国产麻豆剧传媒免费观看 | 成年人在线 | 午夜精品久久久久久久久久久久久久 | 国产精品嫩草影院9 | 国产精品网红直播 | 干狠狠 | 欧美日韩精品综合 | 久久久久国产精品免费网站 | 在线国产福利 | 五月婷婷视频 | 超碰在线97免费 | 三级动态视频在线观看 | 999国内精品永久免费视频 | 日韩一二区在线观看 | 99精品一级欧美片免费播放 | 日日干夜夜爱 | 日韩av在线网站 | 国产精品一区二区三区观看 | 国产成人免费在线 | 97超碰人人看 | 午夜91在线 | 国产毛片在线 | 久久电影日韩 | 国产亚洲字幕 | 日韩精品综合在线 | av资源免费在线观看 | 激情丁香 | 91爱看片 | 日韩免费观看视频 | 精品国产自在精品国产精野外直播 | 在线免费观看欧美日韩 | 欧美一级性生活 | www.伊人色.com| 9999在线视频 | 天天操天天操天天操天天操 | a资源在线 | .精品久久久麻豆国产精品 亚洲va欧美 | 色网站在线| 中文字幕av有码 | 亚洲国产日本 | 国产精品成人免费一区久久羞羞 | 黄色av免费 | 在线观看视频你懂的 | 波多在线视频 | 国产精品久久久久久久久久久久午夜 | www.夜夜爱| 午夜精品久久久久久久久久 | 国产成人在线播放 | 99久热在线精品 | 色偷偷88888欧美精品久久久 | 色av男人的天堂免费在线 | 在线观看视频一区二区 | 免费日韩 精品中文字幕视频在线 | 九九热在线精品视频 | 亚洲一区二区精品3399 | 久久精品高清视频 | 粉嫩av一区二区三区四区在线观看 | 亚洲高清色综合 | 日本bbbb摸bbbb| 国产一区在线观看视频 | 91国内在线视频 | 一区二区三区四区在线 | 在线观看完整版 | 日韩欧美国产激情在线播放 | 在线播放日韩 | 奇米7777狠狠狠琪琪视频 | 日日夜夜免费精品 | 欧美另类亚洲 | 一区二区三区四区在线免费观看 | 免费一级特黄毛大片 | 精品在线不卡 | 天天综合五月天 | 在线视频日韩欧美 | 国产一区二区三区 在线 | 国产一区二区日本 | 久草免费在线观看 | 中文字幕高清免费日韩视频在线 | 国产在线色视频 | 中文字幕免费高清在线 | 婷婷网址 | 在线观看免费成人av | 97成人精品视频在线播放 | 久久精品视频在线看 | 成人9ⅰ免费影视网站 | 天天视频色版 | 99九九免费视频 | 国产系列精品av | 午夜视频免费在线观看 | 亚洲日本三级 | 一级久久精品 | .国产精品成人自产拍在线观看6 | 91日韩免费 | 国产尤物在线观看 | 天天躁日日躁狠狠躁 | 国产精品对白一区二区三区 | 久久呀 | 伊人婷婷| 中文字幕999| 日本性高潮视频 | 国产成人av网址 | 国产亚洲成人精品 | 国产手机视频精品 | 夜色资源站国产www在线视频 | 色噜噜日韩精品一区二区三区视频 | 911亚洲精品第一 | 欧美成人免费在线 | 国产免费人成xvideos视频 | 丁香花中文在线免费观看 | 亚洲精品自拍视频在线观看 | 深夜免费网站 | 日韩二区精品 | 精品一区二区影视 | 成人黄色短片 | 国产精品欧美一区二区 | 麻豆免费在线播放 | 蜜臀一区二区三区精品免费视频 | 国产精品永久 | 国产成人久久精品一区二区三区 | 免费视频久久 | 香蕉97视频观看在线观看 | 波多野结衣在线视频一区 | 国产一区二区日本 | 欧美性黑人| 欧美另类交在线观看 | 在线黄网站 | 碰超在线97人人 | 久久黄网站 | 中文字幕精品一区二区三区电影 | www.亚洲精品视频 | 五月天国产精品 | 99草视频| 五月导航 | 91久久国产综合精品女同国语 | 天天操天天射天天 | 久久久免费观看视频 | 国产91精品久久久久久 | 激情五月开心 | 日韩日韩日韩日韩 | 99视频+国产日韩欧美 | 伊人射| 久久久九九| 93久久精品日日躁夜夜躁欧美 | 欧美日韩国产一区二区三区 | 最新久久久 | 中文字幕高清在线播放 | 亚洲精品资源在线 | 国产一级免费在线观看 | av天天草| 肉色欧美久久久久久久免费看 | av免费网站观看 | 国产 字幕 制服 中文 在线 | 美女久久久久久久久久 | 成人蜜桃 | 97碰碰精品嫩模在线播放 | 日日操网站 | 国产一区二区三区网站 | 中文亚洲欧美日韩 | 色综合久久久久综合99 | 日韩xxxbbb | 精品国产精品国产偷麻豆 | 91在线一区二区 | 亚洲午夜精品久久久久久久久久久久 | 国产亚洲精品bv在线观看 | 久久久久久国产精品久久 | 国产精品免费看久久久8精臀av | 日韩网站一区 | 亚洲狠狠操| 色永久免费视频 | 国产剧情av在线播放 | 天天操天天插 | 久草国产在线 | 国产一区二区在线精品 | 欧美吞精 | 亚洲精品乱码久久久久久蜜桃91 | 亚洲va欧洲va国产va不卡 | 日本爱爱免费 | 国产1级毛片 | 在线播放91| 五月婷婷中文 | 日日日日 | 精品国偷自产国产一区 | 一二三精品视频 | 久久久久亚洲精品男人的天堂 | 成年人在线观看网站 | 91视频麻豆 | 色婷婷五 | 国产精品青青 | 国产精品 国内视频 | 91在线观看视频网站 | 久操伊人 | 久久久久福利视频 | 国产精品久久久毛片 | 国产精品一区二区免费看 | 亚洲va在线va天堂va偷拍 | 欧美激情视频一区二区三区 | 天天操天天干天天玩 | 国产在线播放观看 | 亚洲国产婷婷 | 91精品1区2区| av三级av| 欧美日韩中文在线观看 | 亚洲播放一区 | 在线观看国产v片 | 激情欧美国产 | 日本精品一区二区在线观看 | 亚洲爽爽网 | 亚洲激情综合网 | 久久精品99国产 | 国产福利av在线 | 99久久精品免费看国产一区二区三区 | 91福利在线导航 | 欧美日韩在线网站 | 探花视频免费观看 | 麻豆成人在线观看 | 国产高清av| 中文字幕日本特黄aa毛片 | 国产视频不卡一区 | 中文字幕国语官网在线视频 | 人人干在线观看 | 亚洲精品午夜一区人人爽 | 日韩激情av在线 | 久久99中文字幕 | 超碰在线官网 | 五月婷婷婷婷婷 | 黄色一级在线视频 | 日本xxxx裸体xxxx17 | 国内精品国产三级国产aⅴ久 | 六月丁香综合 | 一区在线免费观看 | 免费看的黄色小视频 | 久久九九久久九九 | 日韩一区二区三区高清免费看看 | 天天干天天做天天操 | 国产美女免费看 | 香蕉视频在线网站 | 激情五月婷婷综合网 | 高清av不卡 | 精品亚洲成a人在线观看 | 亚洲免费av片 | 久久婷婷丁香 | 99在线精品免费视频九九视 | 亚洲va在线va天堂 | 国产精品国产三级国产不产一地 | 日韩特级黄色片 | 丁香婷婷在线观看 | 久久久精品久久 | 国产精品久久久久久久久婷婷 | 成人黄色在线观看视频 | 久久久国产精品成人免费 | 亚洲在线高清 | 日韩免费电影 | 天天干夜夜干 | 91视频在线免费看 | 久久久久色 | 日日躁夜夜躁aaaaxxxx | 国产999精品 | 亚洲人成免费 | 免费特级黄毛片 | 国产一区二区三区网站 | 亚洲高清久久久 | 在线视频 一区二区 | 天天天操天天天干 | 国产精品一区二区免费在线观看 | 99久久精品免费看国产免费软件 | 精品视频久久 | 精品国产一区二区三区久久影院 | 99色精品视频 | 欧美大香线蕉线伊人久久 | 狠狠地日 | 日韩精品视频在线观看网址 | 亚洲区精品 | 欧美成人999 | 国产精品色在线 | 蜜臀av性久久久久蜜臀av | 91人人射| 九色精品在线 | 日韩在线| 亚洲另类交 | 天天色天天草天天射 | av亚洲产国偷v产偷v自拍小说 | 九九免费观看全部免费视频 | 日日久视频| 欧美成人精品欧美一级乱黄 | 欧美日韩国产二区三区 | 精品久久久久久综合日本 | 婷婷在线看 | 久久9999久久免费精品国产 | 久久免费视频播放 | 国产精品久久久久影视 | 国产伦精品一区二区三区在线 | 日本中出在线观看 | 91精品国产91久久久久 | 国产一区黄色 | 久久综合九色综合97婷婷女人 | 国产精品视频线看 | 久久久影片 | 区一区二区三区中文字幕 | 亚洲最新精品 | 久久久久久久久久久网站 | 久久免费视频5 | 欧美精品免费在线 | 中文字幕国语官网在线视频 | 精品国产乱码 | 精品欧美一区二区精品久久 | 日韩大陆欧美高清视频区 | 国内免费久久久久久久久久久 | 在线观看爱爱视频 | 中文字幕在线播放日韩 | 最新成人在线 | 五月天最新网址 | 免费成人黄色片 | 久久免费视频精品 | a国产精品 | 免费av大片 | 97超级碰碰碰碰久久久久 | 最近中文字幕大全 | 国产一区二区不卡视频 | 欧美国产精品久久久久久免费 | 色婷婷久久一区二区 | 亚洲精品无 | av在线网站大全 | 精品久久久免费视频 | 国产一级二级三级视频 | 色夜视频| 国产爽视频| 国产日韩在线看 | 久久免费播放视频 | 久久久官网 | 中文字幕在线字幕中文 | 97视频免费看 | 免费色网 | 2017狠狠干| 欧美日韩后| 成人午夜性影院 | 99视频精品| 日韩在线播放欧美字幕 | 4hu视频| 亚洲va综合va国产va中文 | 国产色小视频 | 美女av免费| 欧美精彩视频 | 999久久久免费精品国产 | 久久精品电影网 | www色片 | 亚洲视频电影在线 | 99视频在线 | 日韩欧美69| 久久久久久久久爱 | 在线国产福利 | 91亚洲网站 | 伊人在线视频 | 精品成人国产 | 天天摸夜夜添 | www.神马久久 | 成年性视频 | 亚洲欧美日韩一区二区三区在线观看 | 日韩精品中文字幕在线 | 国产二区电影 | 国产精品成人一区二区三区吃奶 | 福利区在线观看 | 天天干天天做天天爱 | 91麻豆精品一区二区三区 | 伊人五月 | 欧美综合在线观看 | 丁香九月激情综合 | 久久好看免费视频 | 97超碰人人 | 最新av网址在线 | 97视频总站| 日韩视频专区 | 制服丝袜在线91 | 500部大龄熟乱视频使用方法 | 91精彩视频| 日韩在线观看小视频 | 91精品国产欧美一区二区成人 | 免费观看91视频大全 | 日韩精品久久中文字幕 | 午夜视频免费在线观看 | 高清av影院| 久久av一区二区三区亚洲 | 99色视频在线 | 国产精品久久久久久久久搜平片 | 99久久精品无码一区二区毛片 | 日韩天堂在线观看 | 亚洲va欧美va| 91中文字幕一区 | 麻豆视频免费入口 | 国产精品网站 | 欧美日韩国产一二 | 久久久久在线视频 | 国产精品剧情在线亚洲 | 91视频免费国产 | 国产精品完整版 | 色五婷婷 | 日本成址在线观看 | 五月婷婷激情综合网 | 午夜黄色影院 | 亚洲精品乱码 | 国产在线v| 国产一级视频在线免费观看 | 久久国产免 | 免费观看日韩 | 最新中文在线视频 | 成人精品影视 | 91视频在线免费下载 | 在线国产专区 | 国产手机在线观看视频 | 成人xxxx| 美女久久精品 | 久久久久亚洲精品男人的天堂 | 久久99精品波多结衣一区 | 国产精品久久伊人 | 狠狠色丁香婷婷综合久久片 | 麻豆免费视频网站 | 中文久草| 人人草天天草 | 久久男人影院 | 在线视频 一区二区 | 黄色免费观看视频 | 最新影院 | 国产黄色电影 | 91精选在线 | 999国内精品永久免费视频 | 一区二区中文字幕在线 | 91av在线精品 | 亚洲美女免费精品视频在线观看 | 国产亚洲永久域名 | 337p西西人体大胆瓣开下部 | 国产精品网在线观看 | 国产精品网址在线观看 | 国产v在线播放 | 国产精品欧美久久久久无广告 | 色亚洲网 | 久草在线观看视频免费 | 激情九九 | 中文字幕资源站 | 亚洲精品66| 91av手机在线观看 | 日本精品中文字幕 | 国产视频在线一区二区 | 国产精品免费久久久久久久久久中文 | 在线 视频 亚洲 | 波多野结衣一区三区 | 91综合色| 精品久久久网 | 少妇搡bbbb搡bbb搡69 | 就要干b| 99视频在线精品 | 丁香花在线观看视频在线 | 久久中文欧美 | 丁香婷婷激情 | 国产高清av | 九九色视频| 91香蕉视频 mp4| 久久热首页 | aaa日本高清在线播放免费观看 | 久久久久北条麻妃免费看 | 在线观看成人小视频 | 久久99热这里只有精品 | 九九99靖品| 91精品视频播放 | 国内三级在线观看 | 欧美激情第十页 | 色婷婷福利视频 | 中文字幕国产视频 | 91视频91蝌蚪| 成年人免费在线观看 | 精品国产乱码久久久久久1区2匹 | 97成人精品| 在线视频观看成人 | 中文字幕日韩一区二区三区不卡 | 久操操| 天天综合人人 | 五月天综合激情网 | 国产xxxx做受性欧美88 | 在线视频欧美精品 | 99色网站| 国产成人综| 国产成人一区在线 | 丁香六月激情 | 国产精品日韩在线观看 | 六月丁香婷 | 中中文字幕av在线 | 久久午夜电影院 | 亚洲黄色免费 | 91亚瑟视频| 亚洲爱视频 | 亚洲激精日韩激精欧美精品 | 天天操天天是 | 亚洲妇女av| 波多野结衣在线视频免费观看 | 狠狠色噜噜狠狠狠 | 激情久久综合网 | 亚洲国产一二三 | 狠狠撸电影| 69国产盗摄一区二区三区五区 | 久久一视频| 久久资源在线 | 在线播放国产一区二区三区 | 亚洲欧洲精品一区二区精品久久久 | 在线 日韩 av | www.黄色片.com | 国产一级黄色电影 | 天天干天天操天天干 | 天天操狠狠操网站 | 久久婷婷精品 | 国内精品久久久久影院优 | 国精产品一二三线999 | 国产精品免费小视频 | 国产一二三四在线观看视频 | 免费观看成人av | 成年人在线免费视频观看 | 91字幕 | 久久av免费电影 | 五月婷在线 | 久久精品综合视频 | 精品黄色在线观看 | 日韩中文久久 | 欧美亚洲国产一卡 | 狠狠色丁香婷婷综合橹88 | 欧美精品国产精品 | 一区 二区 精品 | 在线v| 狠狠躁夜夜躁人人爽超碰97香蕉 | 欧美经典久久 | 国产精品久久久久影院日本 | 在线观看岛国片 | 国产成人av电影 | 在线观看中文字幕 | 国产黄色精品 | 色偷偷88欧美精品久久久 | 久久久免费观看完整版 | 日韩精选在线 | 日韩在线视频网 | 日韩在线观看一区二区三区 | 色婷婷色 | 色久五月 | 亚洲视屏在线播放 | 国产精品中文字幕在线 | 久久综合亚洲鲁鲁五月久久 | 又黄又爽又色无遮挡免费 | 99产精品成人啪免费网站 | www黄色软件 | 欧洲一区二区在线观看 | 久久只精品99品免费久23小说 | 91成人在线视频观看 | 国内免费久久久久久久久久久 | 黄色片网站av | 天堂av色婷婷一区二区三区 | 一本一本久久a久久精品综合 | 欧美一级高清片 | 天干啦夜天干天干在线线 | 国产精品99久久久久久宅男 | 在线一二三四区 | av电影免费 | 懂色av一区二区在线播放 | 国产精品一区二区免费视频 | www.久久91| 日韩欧美高清不卡 | 久草视频在线免费 | 天天操夜 | 国产精品一区二区免费在线观看 | www黄| 最新日本中文字幕 | 成人亚洲欧美 | 成人免费看片98欧美 | 日韩免费看的电影 | 天天躁日日躁狠狠 | 免费黄色网址大全 | 天天插综合网 | 国产色中涩 | 国产精品精品久久久久久 | 天海翼一区二区三区免费 | 久久开心激情 | 97成人免费 | 极品久久久 | 婷婷色在线资源 | 毛片3| 欧美日韩一区二区在线观看 | 开心激情婷婷 | 美女网站一区 | 在线看不卡av | 国内外成人在线 | 黄色天堂在线观看 | 在线播放你懂 | 亚洲成人av电影 | 黄色软件在线观看视频 | 亚洲国产精久久久久久久 | 久久理论影院 | 免费观看www小视频的软件 | 韩国三级av在线 | 2017狠狠干| 国产精品九九久久99视频 | 精品一区二区免费在线观看 | 久草免费在线视频观看 | 99久久精品免费看国产 | 欧美性大胆 | 午夜精品一区二区三区在线播放 | 久久国产精彩视频 | 天天干天天操天天操 | 精品国产伦一区二区三区 | a级片网站 | 免费一级片在线观看 | 精品福利视频在线观看 | 在线成人观看 | 国产一级免费在线 | 亚洲专区在线视频 | 在线激情av电影 | 欧美日韩视频在线观看一区二区 | 国产精品观看在线亚洲人成网 | 美女一二三区 | 亚洲一区尤物 | 国产精品一区二区av影院萌芽 | 日韩毛片在线免费观看 | 91精品国产综合久久久久久久 | av大片免费看 | 2000xxx影视 | 成人av在线电影 | 成人精品视频久久久久 | 视频福利在线观看 | 少妇高潮冒白浆 | 国产我不卡 | 狠狠色伊人亚洲综合网站野外 | 精品久久久久国产 | www.色五月.com | 欧美久久精品 | 中文字幕.av.在线 | 99久久精品免费看国产一区二区三区 | 午夜黄色大片 | 成人在线播放av | 97精品国产手机 | av短片在线观看 | 国产女v资源在线观看 | 伊人久久电影网 | 国产精品免费观看网站 | 最近中文字幕大全中文字幕免费 | 欧美射射射 | 日韩午夜小视频 | 亚洲精品福利在线观看 | 成人毛片一区二区三区 | 日韩电影中文字幕在线 | 精品乱码一区二区三四区 | 又污又黄网站 | 欧美性生交大片免网 | 日韩在线观看精品 | 中文字幕在线观看视频一区二区三区 | 免费久久久 | 一区二区三区四区在线免费观看 | 九九九九精品九九九九 | 国产激情小视频在线观看 | 免费在线播放av电影 | 日韩www在线 | 久久久久亚洲精品中文字幕 | 超碰在线9 | 一级做a视频 | 亚洲精品网页 | 伊人婷婷网 | 欧美成人精品欧美一级乱 | 涩涩资源网 | 天堂av官网 | 久久成人午夜 | 在线播放 日韩专区 | 国产一区成人在线 | 麻豆影视在线免费观看 | 国产精品免费一区二区三区 | 日韩xxxbbb| av网站播放 | 亚洲免费黄色 | www.97色.com| 我爱av激情网 | 天天操夜 | 91久久久久久久一区二区 | 久久刺激视频 | 色永久免费视频 | 韩国一区二区三区视频 | 亚洲国产日本 | 国产精品美女久久久久久久 | 久久久久久久久久久久久久电影 | 天天碰天天操视频 | 一级一片免费观看 | a级片在线播放 | 欧美在线18| 一级久久精品 | 中文字幕av在线播放 | 99精品国产一区二区 | 欧美电影黄色 | 国产一级黄色电影 | 国产91九色视频 | 在线观看成年人 | 五月综合| 国产精品一区专区欧美日韩 | 日韩免费在线视频 | av大片网站| 国产视频久久久 | 国产亚洲成人精品 | 久久久99精品免费观看app | 天天爱综合 | 正在播放 久久 | 久久91久久久久麻豆精品 | 国产精品欧美久久久久久 | 在线天堂8√ | 黄色成人在线观看 | 黄色一级在线观看 | 免费a网| 精品久久久影院 | www.色五月 | 成人免费在线视频观看 | 欧美一区二区三区免费观看 | 超碰97公开| 久久99精品久久久久久清纯直播 | 精品国产乱码 | 婷色| 欧美日韩二三区 | 国产精品久久久久久久久久久久午夜 | 国产精品麻豆免费版 | 国产一区二区三区视频在线 | 久久小视频 | 亚洲精品乱码久久久久久写真 | 五月开心网 | 国产一区国产二区在线观看 | 中文字幕久久精品亚洲乱码 | 久久av一区二区三区亚洲 | 天天色天天干天天色 | 丁香六月在线观看 | 欧美日韩不卡一区二区 | 一区二区高清在线 | 午夜一级免费电影 | 亚洲va欧美 | 超碰人人在线观看 | 91精品国产自产老师啪 | 天天av在线播放 | 黄色一级大片免费看 | 亚洲国产精品免费 | 狠狠ri| av一二三区| 天天夜夜狠狠操 | 欧美日韩不卡在线 | 狠狠干免费 | 99精品在线看 | 欧洲精品码一区二区三区免费看 | 国内精品国产三级国产aⅴ久 | 国产综合精品久久 | 97在线观看| 午夜av片 | 成年人三级网站 | 日韩在线网 | 天天射天天搞 | 国产 日韩 在线 亚洲 字幕 中文 | 欧美大片在线观看一区 | 亚洲精品乱码久久久久久高潮 | 天天草综合网 | 久久国产欧美日韩精品 | 99精品热视频只有精品10 | 日韩二区在线观看 | 在线观看mv的中文字幕网站 | 91精品国产三级a在线观看 | 久久久亚洲精华液 | 麻豆国产露脸在线观看 | 亚洲成人黄色网址 | 天天躁日日躁狠狠躁 | 国产一级免费观看 | 91视频啊啊啊 | 国产精品高潮在线观看 | 久久久精品国产一区二区电影四季 | 亚洲成人黄色av | 日韩伦理一区二区三区av在线 | 99久久精品日本一区二区免费 | 欧美日韩免费视频 | 国产91综合一区在线观看 | 丁香导航 | 97免费视频在线 | 天天色综合天天 | 成年人视频在线免费播放 | 国产精品淫片 | 不卡精品视频 | 狠狠网亚洲精品 | 精品国产免费久久 | 日韩免费福利 | 在线播放视频一区 | 97国产在线观看 | 99精品视频精品精品视频 | 久久精品免费电影 | 成人av片免费观看app下载 | 国产热re99久久6国产精品 | 91av免费在线观看 | 欧美一进一出抽搐大尺度视频 | 丁香激情综合 | 五月综合激情 | 超碰在线色 | 97影视| 中文一区二区三区在线观看 | 久久伊人爱 | 精品久久电影 | 久久综合视频网 | av在线电影播放 | 国产系列 在线观看 | 91在线免费视频观看 | 久久久国产精华液 | 国产一区二区在线视频观看 | 狠狠色丁香婷婷综合视频 |