好吧,在互聯網上,我已經看到方程式來解決這個問題,但他們需要平面的法線,並且數學數據比我知道的要高很多。基本上,如果我對於我的射線有x,y,z位置(以及x,y,z旋轉),並且對於代表我的平面的三個點我有x,y,z,那麼我將如何解決碰撞點?一條線和一張臉的碰撞
我之前完成過2D碰撞,但我對如何在3D中工作毫無頭緒。另外,我在java中工作,儘管我已經足夠了解C#了。
感謝下面的答案,我能夠找到我臉部的正常。這就讓我通過摸索與http://geomalgorithms.com/a05-_intersect-1.html,想出下面的代碼(手工製作矢量數學除外):
Vertice Vertice1 = faces.get(f).getV1();
Vertice Vertice2 = faces.get(f).getV2();
Vertice Vertice3 = faces.get(f).getV3();
Vector v1 = vt.subtractVertices(Vertice2, Vertice1);
Vector v2 = vt.subtractVertices(Vertice3, Vertice1);
Vector normal = vt.dotProduct(v1, v2);
//formula = -(ax + by + cz + d)/n * u where a,b,c = normal(x,y,z) and where u = the vector of the ray from camX,camY,camZ,
// with a rotation of localRotX,localRotY,localRotZ
double Collision =
-(normal.x*camX + normal.y*camY + normal.z*camZ)/vt.dotProduct(normal, vt.subtractVertices(camX,camY,camZ,
camX + Math.sin(localRotY)*Math.cos(localRotX),camY + Math.cos(localRotY)*Math.cos(localRotX),camZ + Math.sin(localRotX)));
此代碼,mathimatically應該工作,但我還沒有正確測試代碼。艱難的我會繼續努力,我認爲這個話題完成了。謝謝。
如果人們至少會告訴我爲什麼他們低估了我,那麼至少這會是有益的。 –
他們很可能是downvoting,因爲你沒有顯示你已經在這個問題上已經做出的任何嘗試(代碼,方程等)。我知道你可能會停留在哪裏,所以我試圖提供一些提示。請更新你的問題,因爲我確信你不是唯一一個處理這類問題的人。 –
我必須在這裏做一些更正:'Vector normal = vt.dotProduct ...'行應該使用交叉產品。這是兩個完全不同的東西。點積返回一個標量(即一維值),其中叉積返回一個向量。 接下來,該公式不會產生一個向量,它會產生一個標量。沒有向量的劃分。等式('n * u')的底部項是n和u的點積,它產生一個標量。 –