Используете OpenGl с C #? [закрыто]

118

Есть ли бесплатные библиотеки поддержки OpenGL для C #? Если да, то какой из них использовать и где найти образцы проектов?

Предоставляет ли C # классы для OpenGL?

MegaByte
источник
Я знаю, что это очень старая ветка, но Unity может быть вам интересна
clabe45

Ответы:

129

OpenTK является улучшением по сравнению с Tao API, так как он использует идиоматический стиль C # с перегрузкой, строго типизированными перечислениями, исключениями и стандартными типами .NET:

GL.Begin(BeginMode.Points);
GL.Color3(Color.Yellow);
GL.Vertex3(Vector3.Up);

в отличие от Tao, который просто отражает 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 января 2016 г . : Сегодня сопровождающий OpenTK отказался от проекта , оставив его будущее неопределенным. Форумы забиты спамом. Сопровождающий рекомендует перейти на MonoGame или SDL2 #.

Обновление от 30 июня 2020 года : у OpenTK уже давно появились новые сопровождающие, и есть активное сообщество Discord. Таким образом, предыдущая рекомендация использовать другую библиотеку не обязательно верна.

BillRob
источник
5
Я не думаю, что эти функции очень репрезентативны, потому что все они устарели и удалены из основного профиля OpenGl.
Arne
6
Правда, эти функции удалены из основного профиля. Но аргументы все еще актуальны. «OpenTK является улучшением по сравнению с Tao API, поскольку в нем используется идиоматический стиль C # с перегрузкой, строго типизированными перечислениями, исключениями и стандартными типами .NET»,
Сяифул Низам Яхья
1
Связанный веб-сайт сейчас недействителен для этого сообщения.
Сонни Чайлдс,
16

Я думаю, что @korona имел в виду, поскольку это просто C API, вы можете использовать его прямо из C #, набрав столько текста:

[DllImport("opengl32")]
public static extern void glVertex3f(float x, float y, float z);

К сожалению, вам придется делать это для каждой вызываемой функции OpenGL, и в основном это то, что Tao сделал для вас.

Джефф Мак
источник
Как бы вы это сделали в Linux (с моно)?
deceleratedcaviar
Практически
Джефф Мак
15

Дао должно быть хорошей основой.

Со своего сайта:

Tao Framework для .NET - это набор привязок для облегчения разработки кроссплатформенных мультимедийных приложений с использованием платформ .NET и Mono.

Олафур Вааге
источник
1
Новый веб-сайт Tao: Tao Framework
Thymine
9

SharpGL - это проект, который позволяет использовать OpenGL в приложениях Windows Forms или WPF.

dharmatech
источник
7

Вы можете OpenGL без оболочки и использовать его изначально на C #. Как и сказал Джефф Мак, вам придется импортировать все необходимые функции с помощью DllImport.

Он упустил из виду необходимость создания контекста, прежде чем вы сможете использовать любую из функций OpenGL. Это несложно, но есть несколько других не очень интуитивно понятных DllImports, которые нужно сделать.

Я создал пример проекта C # в VS2012 с почти минимально необходимым для работы OpenGL в Windows. Окно окрашивается только в синий цвет, но этого должно быть достаточно, чтобы вы начали. Пример можно найти на http://www.glinos-labs.org/?q=programming-opengl-csharp . Найдите внизу пример No Wrapper .

Гарри Глинос
источник
5
ваша ссылка мертва, не могли бы вы поделиться своим проектом. Спасибо.
dangerousdave
7

Я бы также рекомендовал Дао Framework . Но еще одно замечание:

Взгляните на эти руководства: http://www.taumuon.co.uk/jabuka/

Оливер
источник
Я понятия не имею, что случилось с Тао, поскольку страница давно закрылась.
Dominic K
Новый веб-сайт Tao: Tao Framework
Thymine
1
Дао кажется движущейся мишенью. Я обновил ссылку, потому что теперь она тоже перешла из моно в sourceforge.
Оливер
Ничего себе, ноябрь 2005 ... OpenGL не сильно изменился?
jocull
1
@JonHarrop да похоже , что они не установили редирект там , используя страницу GitHub Теперь opentk.github.io
Сноходицы
4

Что бы вы хотели, чтобы эти вспомогательные библиотеки делали? Просто использовать OpenGL из C # достаточно просто и не требует дополнительных библиотек afaik.

Korona
источник
В каком пространстве имен можно найти эти классы?
MegaByte
4
OpenGL не является частью .NET,
начиная с
3
@MegaByte Доступ к ним должен осуществляться через вызов платформы.
Ограниченное искупление
2

Что касается (несколько не по теме, я знаю, но поскольку он был затронут ранее) выбора 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 afaik ...

В качестве дальнейшего примечания, это не единственные соображения, но они могут облегчить выбор для некоторых ...

Aycox
источник
1

Для XNA 2.0 требуется как минимум карта шейдера 1.1. Хотя это старая технология, она есть не у всех. Некоторые новые ноутбуки (по нашему опыту планшеты Toshiba с графикой Intel) не поддерживают шейдер 1.1. XNA просто не будет работать на этих машинах.

Это серьезная проблема для нас, и мы перешли на Tao и OpenGL. Кроме того, с Tao у нас есть привязки для поддержки аудио и Lua.

Крис Мастертон
источник