2013-07-25 3 views
0

Может ли кто-нибудь объяснить математику позади функции Tex2D в HLSL?Математика за Tex2D в HLSL

Один из примеров: с учетом квадрата с четырьмя вершинами, координаты текстуры (0,0) (0,1) (1,0) (1,1) на нем, а ширина и высота текстуры 640 и 480. Как шейдер может определить количество попыток выборки? Если нужно напрямую сопоставлять тексели с пикселями, означает ли это, что шейдеру нужно выполнить 640 * 480 раз выборки с увеличением координат текстуры в каких-то градиентах? Кроме того, я был бы признателен, если бы вы могли предоставить больше ссылок и статей по этой теме.

Спасибо.

ответ

1

После вершинного шейдера растеризатор «преобразует» треугольники в пиксели. Каждый пиксель связан с положением экрана, а атрибуты вершины треугольников (например, координаты текстуры) интерполируются по треугольникам, а интерполированное значение сохраняется в каждом пикселе в соответствии с положением пикселя.

Шейдер пикселей работает один раз на пиксель (в большинстве случаев).

Количество образцов, отбираемых на пиксель, зависит от используемого сэмплера. Если вы используете точечный сэмплер, текстуру отбирают один раз, 4 раза, если вы используете билинейный сэмплер и еще несколько, если используете более сложные пробоотборники.

Итак, если вы рисуете полноэкранный четырехъядерный квадрат, текстура, которую вы отбираете, имеет тот же размер цели рендеринга, и вы используете точечный сэмплер, текстура будет отобрана шириной * высота раз (один раз на пиксель) ,

Вы можете думать о текстурах как о двумерном массиве текселей. tex2D просто возвращает texel в запрошенном месте, выполняя некоторую интерполяцию в зависимости от используемого сэмплера (координаты текстуры обычно относятся к размеру текстуры, поэтому аппаратное обеспечение преобразует их в абсолютные координаты).

Эта ссылка может быть полезно: Rasterization

+1

только для полноты: 'tex2D' делает также Mipmapping для вас или с DDX и DDY или с LOD уровня. – Gnietschow

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