Использование OpenGl с C #?

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

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

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

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

в отличие от Tao, который просто отражает API C:

 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, так как это всего лишь API C, вы можете использовать его с 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.

Я бы также рекомендовал Тао-frameworks . Но еще одно примечание:

Взгляните на эти учебники: http://www.taumuon.co.uk/jabuka/

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

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

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

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

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

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

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

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

  • У меня есть Tessellated Sphere OpenGL, и я хочу вырезать в ней цилиндрическое отверстие
  • Как OpenGL работает на самом низком уровне?
  • Как создать контекст рендеринга OpenGL с прозрачным фоном?
  • Вращение объекта вокруг неподвижной точки с помощью glMultMatrix
  • Получение истинного значения z из буфера глубины
  • Нормальное отображение ужасно ошибочно
  • Рисование сферы в OpenGL без использования gluSphere ()?
  • Класс Mesh, вызванный с конструктором по умолчанию, не работает OpenGL C ++
  • Рекомендации OpenGL VAO
  • Должен ли я когда-либо использовать `vec3` внутри однородного буфера или шейдерного хранилища?
  • Как нарисовать текст, используя только методы OpenGL?
  • Давайте будем гением компьютера.