Я пытаюсь написать Ray Tracing в LWJGL, чтобы перейти от положения мыши к концу дисплея. Я написал код для поиска позиций мыши и создания Vector3 для начальной и конечной позиции лучей, но как мне «запустить» луч и обнаружить объект?
Я пытался использовать камеры для позиционирования, но мой друг - тот, кто написал основную систему отображения, и она довольно искажена и трудна для чтения. Вместо этого я остановился на луче из положения мыши внутри дисплея и задней части Z дисплея.
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. Объект, который я хочу обнаружить, является 3d-моделью внутри области отображения.
Возврат позиций startRay и endRay Vector3 уже подтвержден для работы, просто нужно знать, как:
1) Отдай луч
2) Обнаружить объект между двумя точками
Большое спасибо за вашу помощь.