2015-01-30 1 views
3

Я читал многочисленные описания поведения dFdX(n) и dFdY(n) и считаю, что у меня все еще есть дескриптор частичных производных от школы. Я не следую за тем, где «n» происходит на простом возможном примере?понимание основ dFdX и dFdY

Чтение GLSL встроенные функции dFdx(n) и dFdy(n) без какого-либо контекста, кроме математики, я бы интерпретировать их как «У меня есть некоторая функция от х и у: f(x,y), я беру частную производную этой функции ВПР x d/dx(x,y), и я оценить частную производную формулу для некоторого значения x и y, который я предполагаю, является входным параметром n выше.

Я прочитал много описаний того, как dFdx() и dFdy() позволяете найти оконное пространство градиент для вывода фрагментов. Случай с фрагментом вывода - вот что меня больше всего интересует в данный момент, так как я не, пытающийся определить скорость изменения координат текстуры w.r.t, как растеризуется текстура.

Я ищу, чтобы использовать dFdx(n) и dFdy(n), чтобы найти градиент градиента оконного пространства выходных фрагментов. Я не совсем понимаю, как мысленно построить дифференцируемую функцию и как это относится к буфере кадров и как относится к этому n (например, n относится к окрестности фрагмента 2x2 текущего фрагмента, координатное пространство окна всего фреймбуфера так что я оцениваю градиент при этом значении, другой)?

Я надеюсь, что тип ввода n в любом ответе на этот вопрос является скаляром (float), и мы просто обсудим одно измерение, dFdx(), чтобы упростить обсуждение.

+1

Возможный дубликат [Объяснение dFdx] (http://stackoverflow.com/questions/16365385/explanation-of-dfdx) –

ответ

3

Позволяет проверить man page:

genType dFdx( genType p); 

genType dFdy( genType p); 

Доступно только в пиксельный шейдер, эти функции возвращают частную производную от выражения р относительно окна х координат (для dFdx *) и у координата (для dFdy *).

dFdxFine и dFdyFine вычисляют производные с использованием локального различия на основе значения p для текущего фрагмента и его непосредственного соседей (я).

dFdxCoarse и dFdyCoarse вычисление производных с использованием локальных разностей на основе значения р для соседей текущего фрагмента, и будут возможно, но не обязательно, включают в себя значение для текущего фрагмента. То есть в заданной области реализация может вычислять производные в меньшем количестве уникальных мест, чем для соответствующих функций dFdxFine и dFdyFine .

dFdx возвращает либо dFdxCoarse, либо dFdxFine. dFdy возвращает либо dFdyCoarse, либо dFdyFine. Реализация может выбрать, какой расчет выполнить на основе таких факторов, как производительность или значение подсказки API GL_FRAGMENT_SHADER_DERIVATIVE_HINT.

Выражения, которые подразумевают производные более высокого порядка, такие как dFdx (dFdx (п)) имеют неопределенные результаты, как и производные смешанного порядка, такие как dFdx (dFdy (п)). Предполагается, что выражение p является непрерывным и , поэтому выражения, оцениваемые по неравномерному потоку управления, могут быть неопределенными.

Концентрация на тонком варианте. Поскольку каждый процесс фрагмента достигает вызова dFd *, GPU будет собирать значения, переданные в и на основе этих значений, как правило, путем получения разности между соседними значениями и деления на размер фрагмента.

Другими словами пиксельный шейдер рассчитал F(x,y) для фрагмента и передает его в ГПУ, чтобы собрать их и передать обратно dFdX на основе фрагментов прямо рядом с ним какие бы прошли F(x+e, y)

GenType означает, что вы можете поместить в него поплавки, вы также можете передать vec4 и получить значение dFd * для компонента.

+1

Что такое блок dx и dy? Являются ли эти dx = 1/ширина окна в пикселях, 1/высота окна i пикселей? – Pietrko

+0

Я считаю, что устройство имеет один пиксель. Например: - Мы в пикселе (х, у) - значение некоторых изменяющийся «вар» составляет 0,1 в точке (х, у) - dFdx (вар) составляет 0,35 Это означает, что мы можем вычислить «вар "при (x + 1, y) как 0,1 + 0,35 = 0,45 – user1754322

 Смежные вопросы

  • Нет связанных вопросов^_^