java - LWJGL - 如何有效且高效地追踪光线?

标签 java opengl 3d lwjgl

我有原点和方向 vector ,但我不知道如何跟随射线并检查碰撞...

Here是射线的图片,它出去大约 6 个方 block 。

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 并且它工作了一点但是就像当你选择一个 block 的面时它不是很精确。

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

最佳答案

你的问题很不准确。
由于您的场景似乎由网格组成,我建议您查看“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

关于java - LWJGL - 如何有效且高效地追踪光线?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13327544/

相关文章:

3d - 将 2D 点反投影为 3D

Java:访问字符串列表作为 InputStream

java - 如何将 hashmap 中的值存储在字符串数组中

c++ - openGL 纹理映射 - 没有细节,为什么?

c - 将位图/位数组渲染到二维平面的最佳方式(使用 OpenGL)

matlab - 在 Matlab 中可视化环形曲面

c++ - 使用 OpenGL 围绕枢轴点旋转

java - HttpServletRequest - API REST

java - CDI:在 "Injection chain"中生成正确的 EntityManager 的好方法

c++ - 为什么 `precise`限定符不生效?