Попытка RayTrace в LWJGL, обнаружение объекта - PullRequest
1 голос
/ 22 апреля 2019

Я пытаюсь написать 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) Обнаружить объект между двумя точками

Большое спасибо за вашу помощь.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...