Java 尝试在LWJGL中进行光线跟踪,检测对象
我试图在LWJGL中写入光线跟踪,以便从鼠标位置移动到显示的末尾。我已经编写了代码来查找鼠标位置并为光线的开始和结束位置创建矢量3,但是如何“激发”光线并检测对象呢 我曾尝试使用摄像头进行定位,但我的朋友是编写主显示系统的人,该系统非常混乱且难以阅读。相反,我选择只从显示器内部的鼠标位置向显示器的后Z方向发射光线Java 尝试在LWJGL中进行光线跟踪,检测对象,java,3d,lwjgl,raytracing,raycasting,Java,3d,Lwjgl,Raytracing,Raycasting,我试图在LWJGL中写入光线跟踪,以便从鼠标位置移动到显示的末尾。我已经编写了代码来查找鼠标位置并为光线的开始和结束位置创建矢量3,但是如何“激发”光线并检测对象呢 我曾尝试使用摄像头进行定位,但我的朋友是编写主显示系统的人,该系统非常混乱且难以阅读。相反,我选择只从显示器内部的鼠标位置向显示器的后Z方向发射光线 public class Picker { static Vector3f startRay; static Vector3f endRay; pu
public class Picker {
static Vector3f startRay;
static Vector3f endRay;
public Picker() {
startRay = new Vector3f();
endRay = new Vector3f();
}
private static Vector2f getMouseCoords() {
float x = (2f* Mouse.getX()) / Display.getWidth() - 1;
float y = (2f * Mouse.getY()) / Display.getHeight() - 1f;
return new Vector2f(x, y);
}
public static String getRayStr() {
float x = (2f* Mouse.getX()) / Display.getWidth() - 1;
float y = (2f * Mouse.getY()) / Display.getHeight() - 1f;
String str = "Mouse X: " + x + " Mouse Y: " + y;
str += "\nStart X: " + startRay.x + " Start Y: " + startRay.y + " Start Z: " + startRay.z;
str += "\nEnd X: " + endRay.x + " End Y: " + endRay.y + " End Z: " + endRay.z;
return str;
}
public static void setStartRay() {
Vector2f mousePos = getMouseCoords();
Vector3f tempStartPos = new Vector3f();
tempStartPos.x = mousePos.x;
tempStartPos.y = mousePos.y;
tempStartPos.z = 0;
startRay = tempStartPos;
}
public static void setEndRay() {
Vector2f mousePos = getMouseCoords();
Vector3f tempEndPos = new Vector3f();
tempEndPos.x = mousePos.x;
tempEndPos.y = mousePos.y;
tempEndPos.z = -1;
endRay = tempEndPos;
}
}
我希望能够直接在startRay和endRay之间检测对象。我要检测的对象是显示区域内的三维模型
返回startRay和endRay Vector3位置已确认有效,只需了解如何:
1) 投射光线
2) 检测两点之间的物体
非常感谢您的帮助。“拍摄光线”只是对多种可能的方法的一种解释,这些方法可以通过分析找到光线与其他几何图元(如三角形、球体、长方体等)的交点。在您的情况下,当您有一个由一组三角形组成的模型时,您需要。此外,为了加快过程,光线跟踪器通常会构建对象/场景的空间加速结构。您还可以使用光栅化器首先将模型渲染到帧缓冲区,然后使用某种颜色编码来识别鼠标光标下的对象。“拍摄光线”这只是对多种可能的方法的一种解释,可以通过分析找到光线与另一几何图元(如三角形、球体、长方体等)的交点。在您的情况下,当您有一个由一组三角形组成的模型时,您需要。此外,为了加快该过程,光线跟踪器通常会构建对象/场景的空间加速度结构。您还可以使用光栅化器首先将模型渲染到帧缓冲区,然后使用某种颜色编码来识别鼠标光标下的对象。