“Triangle Touching”代码没有给出正确的结果

时间:2012-06-21 19:12:11

标签: java 3d trigonometry lwjgl

我在碰撞检测代码中使用的代码是:

(注意:Vector3f是LWJGL库的一部分。)

(注2:Tri是由三个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;
    }

我的问题是如何正确查看空间中的某个点是否触及我的三角形?

2 个答案:

答案 0 :(得分:1)

要测试您的点是否在三角形内,请在测试点创建一条原点并将其延伸到无穷大。一个很好的方法就是水平的光线(例如y常数,x增加到无穷大。然后计算它与你的一个多边形边相交的次数。零或偶数个交点意味着你在三角形之外关于它的好处不仅适用于三角形而且适用于任何多边形。

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

答案 1 :(得分:0)

我可以帮助您的唯一方法是为您提供此链接。 不幸的是,我对LWJGL不是很了解Geometry所以你就是这样。 - Vector3f

希望它有所帮助!如果有,请勾选答案接受。