Java 将长度添加到通过2个点的直线,并获得新的端点

Java 将长度添加到通过2个点的直线,并获得新的端点,java,opengl,geometry,lwjgl,collision,Java,Opengl,Geometry,Lwjgl,Collision,我一直在与lwjgl和j3d合作几何部分。我仍在处理碰撞问题。到目前为止,我所做的关于碰撞的工作是正常的,但是有两个问题。总结一下我当前的碰撞方式,它测试前一个坐标和当前坐标是否穿过一个三角形,物体渲染为什么,然后它在三角形上找到它刚刚相交的点,该点最接近当前坐标,并使你到达那里。它也会使你的y坐标上升0.001。 这个下降但上升0.001是不好的,因为如果你走到一个90度角的三角形上,你可以向左走到右边,但你不能后退,就像你被困在里面一样。 下面是它在imgur上的工作原理图 从这里,我想在当

我一直在与lwjgl和j3d合作几何部分。我仍在处理碰撞问题。到目前为止,我所做的关于碰撞的工作是正常的,但是有两个问题。总结一下我当前的碰撞方式,它测试前一个坐标和当前坐标是否穿过一个三角形,物体渲染为什么,然后它在三角形上找到它刚刚相交的点,该点最接近当前坐标,并使你到达那里。它也会使你的y坐标上升0.001。 这个下降但上升0.001是不好的,因为如果你走到一个90度角的三角形上,你可以向左走到右边,但你不能后退,就像你被困在里面一样。 下面是它在imgur上的工作原理图

从这里,我想在当前坐标和最近点之间的长度上加上.001,我已经知道这些点,并得到新的当前点


顺便说一句,prev是人在移动到cur点之前所处的位置,然后它测试这两个点是否与三角形相交,如果相交,则得到与prev最近的点,这在图片中定义为最近。我已经可以计算所有这些点了

如果我理解正确,您希望添加.001以远离三角形。如果是这种情况,那么需要一个垂直于三角形的长度为0.001的向量。对于三角形,这通常称为法线。如果你已经有了三角形的法线,那么乘以0.001,再加上它。如果你还没有法线,你可以用叉积来计算它,你可以从三角形的顶点用谷歌搜索叉积的细节,比如这样:

Vector3 perpendicular = crossProduct(vertex3.pos - vertex1.pos, vertex2.pos - vertex1.pos);
Vector3 normal = perpendicular / length(normal);
Vector3 offset = normal * 0.001f;