Поделиться через


Правила растеризации (Direct3D 9)

Часто точки, указанные для вершин, не соответствуют пикселям на экране. В этом случае Direct3D применяет правила растеризации треугольников, чтобы решить, какие пиксели применяются к заданному треугольнику.

Правила растеризации треугольников

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.

Сведения о отрисовке строк с антиалиасной линией см. в разделе ID3DXLine.

Правила спрайта точек

Примитивы точек и исправлений растеризируются, как если бы примитивы были сначала тесселлированы в треугольники и результирующий треугольники растеризованы. Дополнительные сведения см. в sprites (Direct3D 9).

систем координат и геометрии