CG/GLSL, как рассчитать расстояние до камеры на пиксель?
Я хотел бы вывести в пиксель шейдера фактическое расстояние от камеры на пиксель. Это означает, что результат (кроме некоторых незначительных отклонений в точности и зажиме) не должен зависеть от ближних / дальних плоскостей отсечения.
Кроме того, плоскость, лежащая точно на ближней плоскости (и параллельно ей), следовательно, не должна давать равномерный результат, поскольку пиксели в середине ближней плоскости ближе к камере, чем пиксели на границе.
Как рассчитать фактическое расстояние до камеры для каждого пикселя в пиксельном шейдере? (фактический язык шейдеров не имеет значения)
2 ответа
Вот пример в Cg http://developer.download.nvidia.com/shaderlibrary/packages/DepthColor.cgfx.zip
Его настройка для FX Composer должна быть тривиальна для любого другого формата.
Вы отправляете положение камеры в форме. Вы отправляете позицию фрагментному шейдеру по-разному. Вы используете встроенную функцию расстояния с этими векторами.
Похоже на это, но не беспокойтесь о том, чтобы усложнить его с помощью.w, если вам это не нужно.
В качестве альтернативы, умножьте положение вершины на матрицу ModelView и используйте для этого length().