Я пытаюсь восстановить МИРОВОЕ положение точки, зная, что это глубина в пространстве EYE, вычисляются следующим образом (в вершинном шейдере):GLSL вычислить мир координаты из глубины глаз и положения экрана
float depth = - uModelView * vec4(inPos , 1.0) ;
где INPOS является точкой в мировом пространстве (Очевидно, я не хочу восстанавливать эту конкретную точку, но точка, в которой глубина выражается в этом формате).
И это нормализуется положение экрана (от 0 до 1), вычисляется следующим образом (в пиксельный шейдер):
vec2 screen_pos = (vec2(gl_FragCoord.xy) - vec2(0.5))/uScreenSize.xy ;
я могу получить доступ к следующей информации:
- uScreenSize: в это имя предложить, это ширина экрана и высота
- uCameraPos: положение камеры в мировом пространстве
и стандартные матрицы:
- uModelView: камера вид матричной модели
- uModelViewProj: модель вид проекции матрицы
- uProjMatrix: проекционный матричные
Как можно вычислить положение (X, Y, Z,) точки в МИРОВОМ пространстве? (не в пространстве EYE)
У меня нет доступа к другим (я не могу использовать ближний, дальний, левый, правый, ...), поскольку матрица проекции не ограничена перспективой или ортогональной.
Заранее спасибо.
Ну. Мне нравится ваш ответ. Я думаю, что могу передать матрицу вида в шейдер и вычислить пересечение. Я не могу проверить сейчас, но я скажу вам, если это сработает. – rperrot
Это отлично работает. Спасибо ! – rperrot