2012-06-21 67 views
0

我用我的碰撞檢測代碼的代碼是這樣的:「是三角觸摸」式的代碼不給正確的結果

(注:Vector3f是LWJGL庫的一部分)

(注2:三是一類由三個LWJGL的Vector3fs的。V1,V2和V3。)

public Vector<Tri> getTrisTouching(Vector3f pos, float radius){ 
     Vector<Tri> tempVec = new Vector<Tri>(); 
     for(int i = 0; i < tris.size(); i++){ 
      Tri t = tris.get(i); 

      Vector3f one_to_point = new Vector3f(0,0,0); 
      Vector3f.sub(pos,t.v1,one_to_point);   //Storing vector A->P 

      Vector3f one_to_two = new Vector3f(0,0,0); 
      Vector3f.sub(t.v2,t.v1, one_to_two);   //Storing vector A->B 

      Vector3f one_to_three = new Vector3f(0,0,0); 
      Vector3f.sub(t.v3, t.v1, one_to_three);   //Storing vector A->C 

      float q1 = Vector3f.dot(one_to_point, one_to_two)/one_to_two.lengthSquared();   // The normalized "distance" from a to 
      float q2 = Vector3f.dot(one_to_point, one_to_three)/one_to_three.lengthSquared();   // The normalized "distance" from a to 



      if (q1 > 0 && q2 > 0 && q1 + q2 < 1){ 
       tempVec.add(t); 
      } 
     } 

     return tempVec; 
    } 

我的問題是我怎麼正確地看到,如果在空間中的點被觸碰我的一個三角形?

回答

1

要測試您的點是否在三角形內,請在測試點創建一條射線並將其擴展到無窮遠。一個簡單的例子是一條水平線(例如y常數,x增加到無窮大),然後計算它與一個多邊形邊相交的次數。零或偶數個交點意味着你在三角形之外。它的好處不僅適用於三角形,而且適用於任何多邊形。

http://erich.realtimerendering.com/ptinpoly/

0

我可以幫助你的唯一方法就是向你提供這個鏈接。 不幸的是,我不是很擅長LWJGL Geometry所以你現在就是。 - Vector3f

希望它有幫助!如果確實如此,請勾選答案接受。