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


Поддержка рисования линий в D3DX (Direct3D 9)

D3DX — это служебная библиотека, которая предоставляет вспомогательные службы. Это слой над компонентом Direct3D.

D3DX поддерживает однопиксельные сглаженные линии. Шаблоны строк больше не поддерживаются.

Библиотека рисования линий эмулирует линии с помощью треугольников текстур и предполагает следующее:

  • Оборудование доступно через интерфейсы Direct3D 9.
  • Доступен по крайней мере один этап текстуры.
  • Используются 64x64 текстуры.
  • Доступны следующие режимы:
    • Билинейная фильтрация
    • Режим адресации Clamp
    • Режим завертывания адресов
    • Альфа-оп модулировать
    • Альфа-смешивание (SRCBLEND = SRC_ALPHA, DESTBLEND = INV_SRC_ALPHA)
    • Альфа-тест, если альфа-смесь недоступна; более низкий результат качества

Для отрисовки сглаженных линий в многократно выборочных целевых объектах отрисовки используйте ID3DXLine, который создает текстурированные многоугольники. Значения охвата пикселей, созданные антиализисной растрацией линий, модулируют альфа-значение пикселя, вычисленное шейдером пикселей. Чтобы нарисовать антиализированную линию, приложение должно включить альфа-смешивание, а затем задать состояние отрисовки D3DRS_ANTIALIASEDLINEENABLE для TRUE.

Описание функциональных возможностей

Библиотека поддерживает рисование цветных линий со следующими функциями линии, каждая из которых не зависит от других:

  • Ширина линии
  • Шаблон линии с повторением (счетчик шаблонов линии сбрасывается с каждым вызовом ID3DXLine::Draw или ID3DXLine::DrawTransform. Он не сбрасывается с каждым сегментом линии ленты.)
  • Сглаживание
  • Линии стиля OpenGL

Заметка

Митерирование не поддерживается.

 

Библиотека использует поддержку аппаратного рисования линий (если она доступна на устройстве) только в том случае, если:

  • Ширина линии равна 1.
  • Шаблон строки не включен.

Однопиксельные сглаженные линии поддерживаются некоторой аппаратурой, поэтому библиотека использует их, если они доступны. Элемент LineCaps структуры D3DCAPS9 перечисляет аппаратные возможности для примитивов рисования строк.

При использовании программного рисования линии, каждая линия расширяется в прямоугольник, и четыре вершины передаются драйверу.

Каждый сегмент линии рисуется двумя треугольниками. Ширина примитива — это указанная ширина плюс 1,0, что может привести к дополнительной строке или столбцу пикселей. По мере того, как линия становится шире, антиалиасинговый градиент в текстуре становится более грубым, и более плотные тексели дублируются вокруг середины. Градиент закодирован в направлении v текстуры и обычно реплицируется вдоль u-направления. Режим адресации текстур для v — зажим.

Каждый сегмент строки в списке можно считать отдельной строкой, которая начинается с предыдущей конечной точки.

Качество защиты вдоль краев параллельно длине исходной линии страдает, так как линия становится более широкой. Ожидается, что ширина линии больше 32,0 начнет демонстрировать артефакты вдоль этих краев.

D3DX