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

时间:2012-11-11 00:41:17

标签: java opengl 3d lwjgl

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

Here是一张光线的照片,大约有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并且它有点工作但是当你选择一个块的面时它不是很精确。

BTW:我正在使用块的显示列表,我只是在显示列表中渲染块四边形。我得到60 FPS。我一直在搜索和搜索,但我找不到关于光线追踪和光线拾取的任何信息......谢谢!

1 个答案:

答案 0 :(得分:1)

你的问题非常准确。
由于您的场景似乎由网格组成,我建议您查看“3D数字差分分析仪”:
http://www.cse.chalmers.se/edu/course/_MY_MISSING_COURSE_2012/_courses_2011/TDA361_Computer_Graphics/grid.pdf
和:
http://en.wikipedia.org/wiki/Digital_differential_analyzer_%28graphics_algorithm%29