本质上,我正在制作的程序将允许用户导入3d模型(作为fbx或obj)。然后使用openGL在窗口中呈现它,然后用户将能够在模型上放置点。
所以,我的问题是,我如何在这两点之间做碰撞检查。因此,如果一条直线从一个点画到另一个点,如果它击中了三维模型,它可以返回“真”例如。如果它根本不通过模型,它将返回'false‘。
下面的图片显示了我将如何应用这个。(在下面显示的图像中,线条跟踪在与模型碰撞后变成绿色,我只是在搅拌器中制作了图像,以帮助描述我的意思。) 使用示例。
发布于 2016-07-04 20:48:11
伪码:
function rayhitsmodel(model, pointA, pointB):
max-distance <- distance-between(pointA, pointB)
ray-source <- pointA
ray-direction <- normalize-vector(pointB - pointA)
for each triangle-index in model.triangle-indices:
p1 <- model.points[triangle-index.point1]
... similarly for p2, p3
triangle <- p1, p2, p3
intersection <- intersect-with-triangle(ray-source, ray-direction, triangle)
if intersection is not nothing
and distance-between(intersection.point, ray-source) <= max-distance
return true
return false射线-三角形相交:算法.
可以进行重优化,例如将模型分割成一个八叉树。交变成O(log )而不是O(n)。有关射线-八叉树交叉口,请参见此:射线-八叉树相交算法。
https://stackoverflow.com/questions/38184826
复制相似问题