Фрагмент шейдера Eye-Space немасштабированная координата глубины - PullRequest
3 голосов
/ 26 апреля 2010

Я пытаюсь использовать немасштабированное (истинное расстояние от передней плоскости отсечения) расстояние до объектов в сцене в фрагментном шейдере GLSL. Значение gl_FragCoord.z ​​меньше, чем я ожидаю. В моем вершинном шейдере я просто использую ftransform (), чтобы установить gl_Position. Я вижу значения от 2 до 3, когда ожидаю, что они будут между 15 и 20.

Как я могу получить реальную глубину пространства глаза? Спасибо!

1 Ответ

4 голосов
/ 26 апреля 2010

Передайте все, что хотите, в отличии от вершинного шейдера.

значение Z, доступное в фрагментном шейдере, прошло нормализацию на основе вашего z-near / z-far (из матрицы проекции) и DepthRange. Так что это не то, что вам нужно. Технически, вы можете попытаться восстановить его, вернув различные операции OpenGL на Z, которые происходят после вершинного шейдера, но это, вероятно, больше проблем (начиная с того факта, что обращение матрицы проекции является нелинейным), чем просто передать то, что вы хотите Точно.

В качестве примечания, Z, с которым вы вычислили бы gl_ModelViewMatrix * gl_Vertex, это Z с точки зрения, а не плоскость, близкая к Z.

...