首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >我怎么能在两点之间做碰撞检查呢?(C++)

我怎么能在两点之间做碰撞检查呢?(C++)
EN

Stack Overflow用户
提问于 2016-07-04 12:30:49
回答 1查看 318关注 0票数 2

本质上,我正在制作的程序将允许用户导入3d模型(作为fbx或obj)。然后使用openGL在窗口中呈现它,然后用户将能够在模型上放置点。

所以,我的问题是,我如何在这两点之间做碰撞检查。因此,如果一条直线从一个点画到另一个点,如果它击中了三维模型,它可以返回“真”例如。如果它根本不通过模型,它将返回'false‘。

下面的图片显示了我将如何应用这个。(在下面显示的图像中,线条跟踪在与模型碰撞后变成绿色,我只是在搅拌器中制作了图像,以帮助描述我的意思。) 使用示例

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-07-04 20:48:11

伪码:

代码语言:javascript
复制
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)。有关射线-八叉树交叉口,请参见此:射线-八叉树相交算法

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38184826

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档