Итак, у меня есть самозванец (реальная геометрия - это куб, возможно, обрезанный, а геометрия импостера - губка Менгера), и мне нужно рассчитать его глубину.GLSL gl_FragCoord.z Расчет и настройка gl_FragDepth
Я могу рассчитать сумму, которую нужно компенсировать в мировом пространстве довольно легко. К сожалению, я потратил несколько часов, чтобы не беспокоить его глубину.
Только правильные результаты я могу получить то, когда я иду:
gl_FragDepth = gl_FragCoord.z
В принципе, мне нужно знать, как gl_FragCoord.z рассчитывается так, что я могу:
- Возьмите обратное преобразование от gl_FragCoord.z до глазного пространства
- Добавить возмущение глубины
- Преобразуйте эту возмущенную глубину обратно в то же пространство, что и исходное gl_FragCoord.z.
Прошу прощения, если это похоже на дублирующий вопрос; здесь есть несколько других сообщений, которые затрагивают похожие вещи. Однако после реализации всех из них никто не работает правильно. Вместо того, чтобы пытаться выбрать один, чтобы получить помощь, на данный момент я прошу полный код, который это делает. Это должно быть несколько строк.
Вы также написали вершинный шейдер? или только фрагментарный шейдер? –
Я не дам вам код по общему принципу, но я могу дать вам [эту ссылку на OpenGL Wiki] (http://www.opengl.org/wiki/Compute_eye_space_from_window_space). Как и эта ссылка на мой учебник по [самозванцам и глубине, который показывает, как это сделать)] (http://www.arcsynthesis.org/gltut/Illumination/Tut13%20Deceit%20in%20Depth.html). Преобразование глубины назад тривиально. –
Майкл: Да, но это всего лишь проход через шейдер.Как это происходит, вычисления выполняются в мировом пространстве, поэтому я могу рассчитать пространство глаз в программе фрагментов. Николь, я уже видел эту страницу. Я реализую его как: vec4 clip_pos = gl_ProjectionMatrix * vec4 (eye_pos, 1.0); float ndc_depth = clip_pos.z/clip_pos.w; gl_FragDepth = (((clip_far-clip_near) * ndc_depth) + clip_near + clip_far)/2.0; К сожалению, глубина, по-видимому, выпадает за пределы глубины, хотя смещения нет. Спасибо, – imallett