代码之家  ›  专栏  ›  技术社区  ›  rano

如何使用多个模型视图矩阵计算拾取光线?

  •  0
  • rano  · 技术社区  · 14 年前

    我想计算光线和用户在我的应用程序屏幕上看到的模型之间的交集。我在跟踪 OpenGL guide

    glPushMatrix ,

    glTranslatef ,

    draw the model

    glPopMatrix ).

    1 回复  |  直到 14 年前
        1
  •  1
  •   Calvin1602    14 年前

    拾取光线与模型矩阵无关。如果场景中的对象移动(即模型矩阵更改),则光线本身不会移动。

    我将相应地编辑这个答案

    编辑:那就买国产的吧

    首先,需要生成光线。您通常希望在世界空间中表达它(即“我的光线开始于与相机相同的位置,其方向是(xyz))。有两种方法可以做到这一点,在openGL Faq中有很好的解释(一种生成拾取光线的方法。。。另一种方法。只是复制粘贴代码。

    现在,您要做的是将光线与网格的三角形相交,但有一个问题,因为三角形与光线在同一个系统中表示。

    所以你必须表示三角形系统中的光线。

    三角形系统:模型系统;光线系统:世界系统。幸运的是,您有一个从模型到世界的矩阵(模型矩阵,您在模型后面设置的矩阵)。所以逆矩阵(ModelMatrix)是从世界到矩阵的矩阵。

    ray = Ray(cam_pos, dir);
    foreach (mesh)
        ModelMatrix = whatever you want
        InverseModelMatrix = inverse(ModelMatrix)
        rayInModelSpace = Ray(InverseModelMatrix x ray.pos, InverseModelMatrix x ray.dir)
        Intersect(rayInModelSpace, mesh)
    

    foreach (triangle in mesh )
        if ray.intersect(triangle) return true
    

    三角形射线相交代码可以在几何工具.com

    代码也可以在几何工具上找到。

    我要离开几天,所以祝你好运:)