нарисовать пунктирную линию, используя буфер вершин в directx11

В OpenGL мы можем установить шаблон линии, используя glEnable (GL_LINE_STIPPLE);glLineStipple(2,0x00FF); А в dx9 мы можем нарисовать пунктирную линию, используя метод ID3DXLine SetPattern(0x00FF).

Но, кажется, в dx11 нет такого метода, чтобы установить шаблон для пунктирной линии. Если это правда, интересно, есть ли умный способ нарисовать пунктирную линию в dx11?


person yvetterowe    schedule 13.08.2012    source источник


Ответы (1)


Вы можете просмотреть этот вопрос. Он спрашивает, как сделать пунктирную линию в неустаревшем современном OpenGL, который по функциональности похож на Direct3D 10+.

Мой ответ в основном состоял в том, чтобы использовать комбинацию альфа-тестирования и шейдера геометрии для этого:

Возможно, вы могли бы также использовать одномерную текстуру с альфа-каналом (или красным), кодирующим шаблон как 0,0 (без линии) или 1,0 (линия), а затем изменить координату текстуры линии с 0 на 1, а во фрагментном шейдере вы делаете простой альфа-тест, отбрасывающий фрагменты с альфой ниже некоторого порога. Вы можете упростить шейдер геометрии для генерации texCoords вашей линии, иначе вам потребуются разные вершины для каждой линии. Таким образом, вы также можете сделать texCoord зависимым от длины строки на экране.

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

Хотя этот вопрос касался OpenGL, основные принципы точно такие же, вам просто нужно сопоставить шейдеры из ответа с HLSL, что не должно быть слишком сложно, учитывая их простоту.

person Christian Rau    schedule 13.08.2012