#c# #.net #graphics #vector-graphics
#c# #.net #графика #векторная графика
Вопрос:
Ради интереса я хотел бы посмотреть, смогу ли я создать библиотеку, которая немного похожа на небольшое подмножество WPF: управляемую графическую систему на основе векторных шаблонов. (У меня есть несколько теорий, которые я хотел бы проверить.) Однако я не графический гений и для начала ищу хорошую библиотеку векторной графики.
Я знаю, что Microsoft использует MilCore внутри, который, похоже, более или менее передает список векторных структур из управляемого мира в неуправляемый мир и отображает их. Я полагаю, что эта базовая библиотека основана на немедленном режиме. Я хотел бы использовать существующую бесплатную библиотеку векторной графики с расширенным списком желаемых функций:
- Векторная графика
- Немедленный или сохраненный режим, предпочтительно немедленный?
- Поддержка пиксельных шейдеров
- Было бы неплохо протестировать геометрию
- Поддержка изображений, поддержка поворота изображений
- Привязка к .NET
- Стабильна до такой степени, что является коммерчески жизнеспособной в небольших масштабах
Вещи, которые мне не нужны:
- Кроссплатформенная поддержка. Если это блокирует ее в DirectX или даже Direct3D 10 или 11 конкретно, пусть будет так.
- Управление графикой более высокого уровня во всем, что напоминает «элемент управления». Этот уровень управления я, вероятно, хотел бы сделать сам.
- Я не боюсь небольшого взаимодействия.
- Потрясающая производительность. Я бы хотел, чтобы это было производительно, но если из-за этого слишком сильно пострадает удобство использования, я не добьюсь успеха.
Эта библиотека http://jeremiahmorrill.com/2011/02/05/a-simple-directcanvas-tutorial / выглядит похоже на то, что я хотел бы, но желательно что-то более стабильное и с большим количеством примеров.
Я бы предпочел что-нибудь на уровень выше DX / OpenGL, если это возможно.
Какие варианты у меня есть? Это существует или это просто несбыточная мечта? Заранее благодарю вас — у меня такое чувство, что я только что ввел список покупок, но я был бы очень признателен сообществу за отзывы по этому поводу. Похоже, это не совсем соответствует другим вопросам по векторной графике, которые я видел в списке здесь, но если я пропустил отличный пост, дайте мне знать!
Комментарии:
1. Я уже некоторое время ищу что-то подобное, но безуспешно. Я надеюсь, что кто-нибудь сможет ее найти, но это больше похоже на поиск Святого Грааля 🙂 Есть прямые оболочки для DirectX, но это бесполезно, тогда есть DirectCanvas, но это не совсем то, что мне нужно…
2. Я взглянул на Clutter, но не смог найти ни одного обновленного. СЕТЕВЫЕ привязки. Есть комментарии по поводу беспорядка?
Ответ №1:
Я несколько раз работал с VG.NET библиотека. Она действительно проста в использовании, имеет отличный дизайнер, а изображения и анимация выполняются быстро. Это моя лучшая рекомендация.
Комментарии:
1. Это выглядит не так далеко от того, что я ищу, но меня это беспокоит… ну, это выглядит немного устаревшим. Она основана на GDI . Я предполагаю, что такой тип исключает поддержку шейдеров тоже. Однако спасибо! Приятно, когда не указывают на что-то не столь низкого уровня.
2. Да, она построена на GDI , но производительность действительно отличная. Они проделали очень большую оптимизацию.
3. Что касается VG.net Я разработчик, и мы работаем над портом Direct2D. Я пока не могу сказать, когда она будет выпущена. Вы должны иметь возможность переключаться между Direct2d и GDI , используя те же библиотеки.
Ответ №2:
Я уже использовал Cairo для векторной графики. Это отличная библиотека для начала работы (кроссплатформенная, с множеством языковых привязок, с открытым исходным кодом и т.д.).
Вы можете ознакомиться с привязками к языкам здесь:
http://cairographics.org/bindings/
Я с большим успехом использовал эти привязки .NET / Mono (от NDesk):
Комментарии:
1. Согласно этой странице, существует серверная часть OpenGL: cairographics.org/backends
2. Серверная часть OpenGL довольно великолепна. Однажды я использовал ее для ускоренных текстовых преобразований в забавном проекте текстового редактора, над которым я работал. Очень аккуратно.
3. Вот сообщение, которое я нашел о Cairo, OpenGL и C #: majkel.wordpress.com/2007/04/26/using-cairo-opengl-and-c
Ответ №3:
Вы можете попробовать SlimDX http://en.wikipedia.org/wiki/SlimDX — у них есть оболочки Direct2D и DirectX. Я полагаю, что оба они удовлетворят вашим требованиям.
Комментарии:
1. 1. Direct2D был устаревшим для DIREEXT3D из-за аппаратной поддержки (насколько я помню, сейчас вы просто делаете 2d в 3d) 2. SlimDX на самом деле не является векторной библиотекой. Этот движок растеризации может делать похожие вещи, но не совсем то же самое.
Ответ №4:
Вы можете увидеть Mono Open GL, которые предоставят вам возможности .NET и Open GL, но вам придется углубиться в open gl, чтобы создать свою библиотеку, но это обеспечит независимость от платформы.
http://www.mono-project.com/Tao
Я еще не пробовал ни один из них сам, но, глядя на примеры, они кажутся довольно простыми для начала. Выполнение на Open GL будет полезно в будущем, поскольку даже мобильные устройства, такие как iPhone, теперь поставляются с поддержкой Open GL.
Комментарии:
1. Я бы действительно предпочел держаться подальше от базовой графической платформы, насколько это возможно. Я хотел бы поработать над чем-то большим на уровне геометрических объектов, а не вершин — поддерживает ли это такой уровень, или я собираюсь перейти к подробным деталям рисования трапеций?