Общие сведения о правилах растеризации
Часто точки, указанные для вершин, не соответствуют пикселям на экране. В этом случае Direct3D применяет правила растеризации треугольников, чтобы решить, какие пиксели применяются к заданному треугольнику.
Это упрощенное введение в правила растеризации. Дополнительные сведения см. в разделе "Правила растеризации". См. также этап растеризатора (RS).
Правила растеризации треугольников
Direct3D использует соглашение о заполнении геометрии в левом верхнем углу. Это то же соглашение, которое используется для прямоугольников в GDI и OpenGL. В Direct3D центр пикселя является решающей точкой. Если центр находится внутри треугольника, пиксель является частью треугольника. Центры пикселей находятся в целых координатах.
Это описание правил растеризации треугольников, используемых Direct3D, не обязательно применяется ко всему доступному оборудованию. Тестирование может выявить незначительные вариации в реализации этих правил.
На следующем рисунке показан прямоугольник, верхний левый угол которого имеет значение (0, 0) и нижний правый угол которого имеет значение (5, 5). Этот прямоугольник заполняет 25 пикселей так же, как и ожидалось. Ширина прямоугольника определяется как правый минус слева. Высота определяется как нижняя минусовая вершина.
В соглашении о заполнении в левом верхнем углу верхний элемент ссылается на вертикальное расположение горизонтальных диапазонов и слева ссылается на горизонтальное расположение пикселей в пределах диапазона. Край не может быть верхним краем, если он не является горизонтальным. Как правило, большинство треугольников имеют только левые и правые края. На следующем рисунке показан верхний край и правый край.
Соглашение о заполнении в верхнем левом углу определяет действие, выполняемое Direct3D, когда треугольник проходит через центр пикселя. На следующем рисунке показаны два треугольника: один в (0, 0), (5, 0) и (5, 5), а другой — (0, 5), (0, 0) и (5, 5). Первый треугольник в этом случае получает 15 пикселей (показан черный), а второй получает только 10 пикселей (показан серый), так как общий край является левым краем первого треугольника.
Если определить прямоугольник с верхним левым углом (0.5, 0.5) и его нижним правым углом (2.5, 4.5), центральная точка этого прямоугольника находится в (1.5, 2.5). Когда растеризатор Direct3D тесселлирует этот прямоугольник, центр каждого пикселя однозначно находится внутри каждого из четырех треугольников, а соглашение о заполнении в верхнем левом углу не требуется. На следующем рисунке показано следующее. Пиксели в прямоугольнике помечены в соответствии с треугольником, в котором Direct3D включает их.
При перемещении прямоугольника на предыдущем рисунке, чтобы его верхний левый угол был в (1.0, 1.0), его нижний правый угол в (3.0, 5.0) и его центр в точке (2.0, 3.0), Direct3D применяет соглашение о заполнении в левом верхнем углу. Большинство пикселей в этом прямоугольнике перестраивает границу между двумя или более треугольниками, как показано на следующем рисунке.
Для обоих прямоугольников затрагиваются одни и те же пиксели, как показано на следующем рисунке.
Правила точки и строки
Точки отрисовываются так же, как спрайты точек, которые отображаются как выровненные с экрана четырехсторонние и поэтому соответствуют тем же правилам, что и отрисовка многоугольников.
Правила отрисовки строк, отличные от антиализасов, совпадают с правилами отрисовки для строк GDI.
Правила спрайта точек
Примитивы точек и исправлений растеризируются, как если бы примитивы были сначала тесселлированы в треугольники и результирующий треугольники растеризованы.
Связанные темы