Подтвердить что ты не робот

Отображение SVG в OpenGL без промежуточного растра

У меня есть несколько простых изображений SVG (вид и глиф), которые я хочу отобразить в приложении OpenGL (в С++ на Debian, используя Qt).

Очевидное решение состоит в том, чтобы использовать библиотеки ImageMagick для convert SVG для растрового изображения и текстуры нанести их на некоторые подходящие полигоны (или просто использовать старые добрые glDrawPixels).

Тем не менее, мне интересно, есть ли там что-нибудь, что переведет SVG непосредственно в последовательность вызовов OpenGL и отобразит его с использованием линий OpenGL, полигонов и тому подобного. Кто-нибудь знает что-нибудь, что может это сделать?

4b9b3361

Ответ 1

Qt может это сделать.
QSvgRenderer может взять SVG и нарисовать его поверх QGLWidget
Возможно, вам придется сражаться с paintEvent() abit, если вы хотите нарисовать что-нибудь еще в QGLWidget, отличном от SVG.

Ответ 2

SVGL, похоже, обращается к этому, но уже несколько лет не работает. Тем не менее вы можете найти там какой-то код.

Ответ 4

Похоже, Inkscape содержит некоторые интересные параметры экспорта, которые могут оказаться полезными. Они включают в себя DXF, PovRay, EPS, PS (PostScript), XAML, Latex и OpenDocument Drawing (ODG). Возможно, есть конвертер для одного из них, и вы можете использовать Inkscape в качестве посредника.

DXF, в частности, является вероятным кандидатом, поскольку он уже является обычным трехмерным форматом. assimp является хорошим кандидатом для загрузки DXF.

Ответ 5

там также tkzinc как возможность

Ответ 6

Мой ответ будет посвящен отображению векторной графики с OpenGL в целом, потому что все решения для этой проблемы могут поддерживать, в частности, тривиально SVG, хотя ни одна из них не поддерживает анимированные SVG (SMIL). Поскольку об анимации ничего не сказано, я предполагаю, что вопрос подразумевает только статические SVG.

С 2011 года современное состояние - ребенок Марка Килгарда, NV_path_rendering, который в настоящее время является только расширением поставщика (Nvidia), как вы уже догадались с его имени. На нем много материалов:

Конечно, вы можете загружать SVG и такие https://www.youtube.com/watch?v=bCrohG6PJQE. Они также поддерживают синтаксис PostScript для путей. Вы также можете смешивать рендеринг маршрута с другими материалами OpenGL (3D), как показано на странице:

NV_path_rendering теперь используется библиотекой Google Skia за кулисами, когда это доступно. (Nvidia предоставила код в конце 2013 и 2014 годах.) Кажется, что один из разработчиков Cairo (который также является сотрудником Intel) http://lists.cairographics.org/archives/cairo/2013-March/024134.html, хотя я еще не знаю каких-либо конкретных попыток использовать cairo для NV_path_rendering.

У выскочки, имеющей еще меньшую (или совершенно нет) поддержку поставщика или академический блеск, NanoVG, который в настоящее время разрабатывается и поддерживается. (https://github.com/memononen/nanovg) Учитывая количество 2D-библиотек поверх OpenGL, которые приходят и уходят со временем, вы делаете большую ставку, используя что-то не поддержанный крупным поставщиком, по моему скромному мнению.