Используя FBO, вы можете визуализировать без отображения результатов. Если вы используете ES 2.0, ваш шейдер фрагментов может получить доступ к глубине текущего фрагмента (в координатах окна) как часть gl_FragCoord, так что вы можете записать это в буфер цвета, используя glReadPixels, чтобы вернуть результат и продолжить. Кроме того, вы можете загрузить world-space z как переменную и записать ее из своего фрагментного шейдера, на случай, если это будет проще.
Чтобы убедить себя, попробуйте написать быстрый шейдер, который быстро выдает gl_FragCoord.z с низкой точностью, например просто
gl_FragColor = vec4(vec3(gl_FragCoord.z), 1.0);
Вы должны получить оттенки серого с интенсивностью цвета, представляющего глубину. Поскольку вы находитесь в координатах окна, интенсивность будет варьироваться от 0.0 (ближайший возможный незарезанный фрагмент) до 1.0 (самый дальний возможный незажатый фрагмент). Чтобы не потерять большую точность, вероятно, более полезно разделить значение между компонентами, поскольку ваш поставщик почти наверняка не поддерживает целевые буферы с плавающей запятой.