Правила растеризации (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.

Правила точечных спрайтов

Точечные спрайты и фрагментарные примитивы подвергаются растеризации таким образом, как если бы эти примитивы сначала рассекались на треугольники и затем проводилась бы растеризация полученных треугольников. Дополнительные сведения см. в разделе Спрайты точек (Direct3D 9).

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