CG/GLSL, как рассчитать расстояние до камеры на пиксель?

Я хотел бы вывести в пиксель шейдера фактическое расстояние от камеры на пиксель. Это означает, что результат (кроме некоторых незначительных отклонений в точности и зажиме) не должен зависеть от ближних / дальних плоскостей отсечения.

Кроме того, плоскость, лежащая точно на ближней плоскости (и параллельно ей), следовательно, не должна давать равномерный результат, поскольку пиксели в середине ближней плоскости ближе к камере, чем пиксели на границе.

Как рассчитать фактическое расстояние до камеры для каждого пикселя в пиксельном шейдере? (фактический язык шейдеров не имеет значения)

2 ответа

Решение

Вот пример в Cg http://developer.download.nvidia.com/shaderlibrary/packages/DepthColor.cgfx.zip

Его настройка для FX Composer должна быть тривиальна для любого другого формата.

Вы отправляете положение камеры в форме. Вы отправляете позицию фрагментному шейдеру по-разному. Вы используете встроенную функцию расстояния с этими векторами.

Похоже на это, но не беспокойтесь о том, чтобы усложнить его с помощью.w, если вам это не нужно.

В качестве альтернативы, умножьте положение вершины на матрицу ModelView и используйте для этого length().

Другие вопросы по тегам