Используя OpenGl с C#?
Есть ли бесплатные библиотеки поддержки OpenGL для C#? Если да, какой из них я использую и где я могу найти примеры проектов?
Предоставляет ли C# классы для OpenGL?
9 ответов
OpenTK является улучшением по сравнению с Tao API, поскольку он использует идиоматический стиль C# с перегрузкой, строго типизированными перечислениями, исключениями и стандартными типами.NET:
GL.Begin(BeginMode.Points);
GL.Color3(Color.Yellow);
GL.Vertex3(Vector3.Up);
в отличие от Дао, который просто отражает C API:
Gl.glBegin(Gl.GL_POINTS); // double "gl" prefix
Gl.glColor3ub(255, 255, 0); // have to pass RGB values as separate args
Gl.glVertex3f(0, 1, 0); // explicit "f" qualifier
Это усложняет портирование, но невероятно приятно в использовании.
В качестве бонуса он обеспечивает рендеринг шрифтов, загрузку текстур, обработку ввода, аудио, математику...
Обновление 18.1.2016: Сегодня сопровождающий OpenTK отошел от проекта, оставив его будущее неопределенным. Форумы заполнены спамом. Сопровождающий рекомендует перейти на MonoGame или SDL2#.
Я думаю, что имел в виду @korona, так как это всего лишь C API, вы можете использовать его непосредственно из C#, чертовски много печатая так:
[DllImport("opengl32")]
public static extern void glVertex3f(float x, float y, float z);
К сожалению, вам нужно будет делать это для каждой вызываемой вами функции OpenGL, и это в основном то, что Тао сделал для вас.
Тао должен быть хорошим каркасом.
С их сайта:
Tao Framework для.NET - это набор привязок, облегчающих разработку кроссплатформенных мультимедийных приложений с использованием платформ.NET и Mono.
SharpGL - это проект, который позволяет использовать OpenGL в приложениях Windows Forms или WPF.
Вы можете OpenGL без оболочки и использовать его изначально в C#. Как сказал Джефф Мак, вам придется импортировать все необходимые функции с помощью DllImport.
Он упустил необходимость создания контекста, прежде чем вы сможете использовать любую из функций OpenGL. Это не сложно, но есть несколько других не столь интуитивно понятных DllImports, которые нужно сделать.
Я создал пример проекта C# в VS2012 с минимальным минимумом, необходимым для запуска OpenGL на Windows. Это только окрашивает окно в синий цвет, но этого должно быть достаточно, чтобы вы начали. Пример можно найти по адресу http://www.glinos-labs.org/?q=programming-opengl-csharp. Посмотрите на пример без оболочки в нижней части.
Я бы также порекомендовал Tao Framework. Но еще одно примечание:
Взгляните на эти учебники: http://www.taumuon.co.uk/jabuka/
Что бы вы хотели, чтобы эти библиотеки поддержки делали? Просто использовать OpenGL из C# достаточно просто и не требует никаких дополнительных библиотек.
Что касается (немного не по теме, я знаю, но так как он был поднят ранее) выбора XNA против OpenGL, в некоторых случаях было бы полезно использовать OpenGL вместо XNA (и в других XNA вместо OpenGL...).
Если вы собираетесь запускать приложения на Linux или Mac с использованием Mono, то, возможно, будет хорошим выбором пойти с OpenGL. Кроме того, что не так широко известно, я думаю, что если у вас есть клиенты, которые будут запускать ваши приложения в среде Citrix, то DirectX/Direct3D/XNA не будет таким экономичным выбором, как OpenGL. Причина этого заключается в том, что приложения OpenGL могут размещаться на меньшем количестве серверов (из-за проблем с производительностью на одном сервере не может размещаться бесконечное количество экземпляров приложений), чем приложения DirectX/XNA, которые требуют, чтобы выделенные виртуальные серверы работали на оборудовании. ускоренный режим. Существуют и другие требования, такие как поддерживаемые графические карты и т. Д., Но я остановлюсь на проблеме XNA против OpenGL. Как ИТ-архитектор, разработчик программного обеспечения и т. Д., Это необходимо учитывать, прежде чем выбирать между OpenGL и DirectX/XNA...
Заметим, что WebGL основан на OpenGL ES3 на...
Как дальнейшее примечание, это не единственные соображения, но они могут сделать выбор легче для некоторых...
Для XNA 2.0 требуется как минимум карта шейдера 1.1. Хотя старые технологии, не у всех есть. Некоторые новые ноутбуки (по нашему опыту планшеты Toshiba с графикой Intel) не поддерживают шейдер 1.1. XNA просто не будет работать на этих машинах.
Это важная проблема для нас, и мы перешли на Тао и OpenGL. Плюс с Тао у нас есть привязки для аудио и поддержки Lua.