C#
OpenGL
OpenGL.Net
OpenTK
SharpGL
TaoFramework
OpenGL на C#. Обзор библиотек.
17:55:00
В то время как использование OpenGL в проектах на C++ – тема весьма неплохо освещенная, альянс OpenGL и C# оказался фактически обойденным стороной и блогами, и видео-тьюториалами, и уж тем более книгами. Конечно, OpenGL выглядит почти одинаково на всех языках, и можно поспорить, что в подобном просто нет надобности – адаптация кода, написанного на C++, под C# не составит большого труда. Однако нельзя отрицать, что в использовании OpenGL на C# есть свои особенности, и чтобы с ними разобраться, порой требуется немало времени. Поэтому я и решила создать этот блог. Здесь будут статьи лишь о том, что у меня самой вызывало затруднения, на темы, которые освещены не так хорошо, как следовало бы. Какие-то советы из личного опыта. Надеюсь, это поможет тем, кто тоже пишет на C# с использованием OpenGL, или, по крайней мере, сэкономит время.
И первое, с чем мне пришлось в своё время столкнуться, – выбор библиотеки. Если быть точнее, я взяла первую попавшуюся и немало с ней настрадалась. Чтобы хоть немного меньше людей повторили эту ошибку, я решила опробовать различные библиотеки и определить, какая из них удобнее и функциональнее.
Мы уже оговорили, что пишем на C#. Теперь условимся, что это проект Windows Forms в Microsoft Visual Studio. По крайней мере, я рассматривала все нижеперечисленные библиотеки применительно к этой среде.
И прежде чем мы начнем, настоятельно рекомендую вам познакомиться с NuGet. Устанавливаем, открываем консоль (Сервис – Диспетчер пакетов NuGet – Консоль диспетчера пакетов), пробуем установить нужный пакет в свой проект и восхищаемся тем, как это просто.
А теперь к теме.
TaoFramework
Благодаря сайту esate.ru (кстати, одному из немногих русскоязычных, обладающих неплохим набором уроков по OpenGL на C#), вероятнее всего, это будет первая библиотека, на которую вы наткнетесь. Просто пройдите мимо. Несмотря на то, что TaoFramework является одной из самых известных, она безнадежно устарела: последняя версия вышла в 2008 году. И даже если вам не принципиально, насколько современными инструментами вы пользуетесь (что вообще-то не очень разумно в мире IT), всё равно пройдите мимо. Эта библиотека просто отказывается нормально работать: одна из .dll обязательно должна лежать в системной папке (что, стоит заметить, возможно сделать не на всех компьютерах), невозможно сделать объект полупрозрачным, возникают проблемы при слиянии .dll с .exe (с этой проблемой столкнутся уже не все, но тем не менее). Да и синтаксис гораздо менее удобен по сравнению с другими библиотеками. Сравните сами:
Gl
.glTranslated(0,0,-6);// функция
TaoFramework gl.Translate(0,0,-6); // та же функция в SharpGL
SharpGL
Неплохая библиотека, важнейшим преимуществом которой, на мой взгляд, является наличие расширений для Visual Studio (по Visual Studio 2013 включительно), которые вы можете скачать на MSDN. Однако стоит пересесть на Visual Studio 2015, как SharpGL теряет большую часть своего очарования: установив пакет через NuGet, вы обнаруживаете, что OpenGLControl никак не соизволит появиться в панели элементов. Кроме того, возникают ошибки при вызове некоторых функций, с которыми не было абсолютно никаких проблем в VS2013.
Основной недостаток – не поддерживается работа с матрицами. Можно, конечно, скачать GlmNet или GlmSharp (GLM – OpenGL Mathematics, т.е. математика для OpenGL), однако гораздо удобнее, когда всё идёт в одном пакете.
OpenTK
Прикрепление библиотеки к проекту займет чуть больше времени, чем у предыдущей, – тут у SharpGL нет равных – однако по-прежнему не представляет ничего сложного:
- Устанавливаем пакет через NuGet:
Install-Package OpenTK
Install-
Package
OpenTK
.
GLControl
- Добавляем GlControl в панель элементов:
Панель элементов – Общие, щелчком правой кнопки мыши открываем меню, находим «Выбрать элементы…». В открывшемся окне щелкаем по кнопке «Обзор…», далее переходим в папку packages/ OpenTK.GLControl/lib/NET40 и выбираем OpenTK.GLControl.dll.
Важнейшими достоинствами OpenTK, на мой взгляд, являются поддержка работы с матрицами и чрезвычайно удобная система enum’ов (перечислений). Одно дело, когда вам нужно помнить самому, какую константу функция может принимать на вход (учитывая, что в OpenGL их огромное количество), и совсем другое – когда вам предлагается список из 5-6 констант, которые точно могут служить входными параметрами.
OpenGL.Net
Очень похожа на OpenTK, но не поддерживает работу с матрицами. Из-за этого остается непонятным, как работать с 3D. Пакет NuGet не включает GLControl, приходится собирать и прикреплять библиотеку вручную. Катастрофически мало примеров, и если вы наберете в поиске «OpenGL.Net», найдете что угодно кроме информации об этой библиотеке: почерпнуть хоть какие-то сведения можно только на странице GitHub. Единственное, в чем ей уступили другие библиотеки – поддерживаемая версия OpenGL: из всех перечисленных только OpenGL.Net поддерживает OpenGL 4.5. И тем не менее, на мой взгляд, она производит впечатление сырого продукта.
Итого, я бы рекомендовала OpenTK. Удобная в применении, с поддержкой одной из последних версий OpenGL (а именно 4.4), она показалась мне самой подходящей для того, чтобы приступить к изучению мира OpenGL.
1 коммент.
Iron Titanium - Iron Tech Solutions
ОтветитьУдалитьIron Tech Solutions provides the highest quality technology and guarantee citizen super titanium armor for production of citizen titanium dive watch high quality electronic and paper titanium engine block batteries. They titanium rod offer fast and mens black titanium wedding bands safe $9.00 · In stock