У меня есть конвейер, который использует матрицы модели, вида и проекции для рендеринга треугольной сетки.
Я пытаюсь реализовать трассировщик лучей, который выберет объект, на который я щелкаю, проецируя начало и направление луча путем инверсии преобразований.
Когда в вершинном шейдере только что была модель (без вида и проекции), у меня было
Vector4f ray_origin = model.inverse() * Vector4f(xworld, yworld, 0, 1);
Vector4f ray_direction = model.inverse() * Vector4f(0, 0, -1, 0);
, и все работало идеально.Однако я добавил матрицу вида и проекции, а затем изменил код на
Vector4f ray_origin = model.inverse() * view.inverse() * projection.inverse() * Vector4f(xworld, yworld, 0, 1);
Vector4f ray_direction = model.inverse() * view.inverse() * projection.inverse() * Vector4f(0, 0, -1, 0);
, и больше ничего не работает.Что я делаю не так?