Java LWJGL-如何有效地跟踪光线?

Java LWJGL-如何有效地跟踪光线?,java,opengl,3d,lwjgl,Java,Opengl,3d,Lwjgl,我得到了原点和方向向量,但我不知道如何跟踪光线并检查碰撞 这是一张射线的照片,它发出大约6个街区 Vector3f cam = camera.getPosition(); Vector3f dir = getDirection(); dir.x *= 40; dir.y *= 40; dir.z *= 40; Vector3f dest = new Vector3f(cam.x + dir.x, cam.y + dir.y, cam.z + dir.z); public Vector3f

我得到了原点和方向向量,但我不知道如何跟踪光线并检查碰撞

这是一张射线的照片,它发出大约6个街区

Vector3f cam = camera.getPosition();
Vector3f dir = getDirection();

dir.x *= 40;
dir.y *= 40;
dir.z *= 40;

Vector3f dest = new Vector3f(cam.x + dir.x, cam.y + dir.y, cam.z + dir.z);


public Vector3f getDirection()
{
    Vector3f vector = new Vector3f();

    float rotX = camera.yaw;
    float rotY = camera.pitch;

    vector.y = (float) -Math.sin(Math.toRadians(rotY));

    float h = (float) Math.cos(Math.toRadians(rotY));

    vector.x = (float) (h * Math.sin(Math.toRadians(rotX)));
    vector.z = (float) (-h * Math.cos(Math.toRadians(rotX)));

    return vector;
}

我试过使用gluUnProject,它有一点效果,但就像你选了块的一个面,它不是很精确


顺便说一句:我使用块的显示列表,我只是在显示列表中渲染块四边形。我每分钟60帧。我一直在搜索,但我找不到任何有关光线跟踪和/或光线拾取的信息。。。谢谢

你的问题很不精确
由于您的场景似乎由网格组成,我建议您查看“3D数字微分分析仪”:

和:

光线投射/跟踪需要大量的数学运算。取决于场景、要跟踪的对象类型(三角形网格、几何形状等)。然后,您必须进行一些空间分割,否则您将检查场景a中所有对象的光线与对象,因为它总是非常慢。因此,您必须使用BSP树或K-d树进行场景定义。您可能会发现一些有用的信息,说明如何在LWJGL at中实现光线拾取。如果您想确定光线是否击中立方体,则需要了解您正在测试6个平面的碰撞。我将从平面相交代码开始。@sorcer:您不需要复杂的数据结构就可以开始;一开始,一个包含最多几十个对象的列表就足够了(甚至可能优于非常小的BSP树和其他加速结构)@phresnel当然取决于场景大小,但确定与基于网格的对象的相交是相当昂贵的(所有三角形都没有任何AABB测试或之前的测试),因此,最终您将以某种空间分区解决方案结束。。