0

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

(注: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;
    }

我的问题是如何正确查看空间中的一个点是否接触到我的三角形之一?

4

2 回答 2

1

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

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

于 2012-06-21T19:19:37.930 回答
0

我可以帮助您的唯一方法是向您提供此链接。不幸的是,我对 LWJGL 不是很好,Geometry所以你来了。-矢量3f

希望能帮助到你!如果是,请勾选答案以接受。

于 2012-06-21T19:18:25.267 回答