2009-02-11 6 views
108

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

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

+0

Я знаю, что это очень старый поток, но [Unity] (https://unity3d.com/) может вас интересует – clabe45

ответ

3

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

+0

В каком пространстве имен могут быть найдены эти классы? – MegaByte

+4

OpenGL не является частью .NET, начиная с версии 4.0 – mafu

+2

@MegaByte Они должны быть доступны через платформу invoke. –

14

Tao Предполагается, что это хороший каркас.

С их сайта:

Дао Framework для .NET представляет собой набор привязок для облегчения разработки приложений СМИ кросс-платформенной использующую платформу .NET и Mono платформ.

+1

Новый сайт для Tao: [Tao Framework] (http://www.mono-project.com/Tao) – Thymine

6

Я также рекомендовал бы Tao Framework. Но одна дополнительная нота:

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

+0

Я понятия не имею, что случилось с Дао, поскольку эта страница давно сменилась. – DMan

+0

Новый сайт для Tao: [Tao Framework] (http://www.mono-project.com/Tao) – Thymine

+1

Тао кажется движущейся целью. Я обновил ссылку, потому что она также перешла из моно теперь в sourceforge. – Oliver

0

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

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

15

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

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

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

+0

Как бы вы это сделали на Linux (с моно)? – dcousens

+0

В принципе, то же самое, http://www.mono-project.com/Interop_with_Native_Libraries –

119

OpenTK является улучшением по сравнению с 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 

Это упрощает портирование, но невероятно приятно использовать.

В качестве бонуса он обеспечивает рендеринг шрифтов, текстур загрузки, обработки ввода, аудио, математике ...

Update 18.1.2016: Сегодня сопровождающий OpenTK имеет stepped away from the project, оставляя его будущее неопределенным. Форумы заполнены спамом. Сопровождающий рекомендует перейти к MonoGame или SDL2 #.

+5

Я не думаю, что эти функции очень репрезентативны, потому что все они устарели и удалены из основного профиля OpenGl. – Arne

+5

Правда, эти функции удаляются из профиля ядра. Но аргументы все еще актуальны. «OpenTK является улучшением по сравнению с API Tao, поскольку он использует идиоматический стиль C# с перегрузкой, строго типизированными перечислениями, исключениями и стандартными типами .NET» –

+0

Связанный веб-сайт недействителен для этого сообщения сейчас. –

8

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

5

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

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

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

+4

Ваша ссылка мертва, вы можете поделиться своим проектом. Благодарю. – dangerousdave

1

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

As еще одно замечание, это не единственные соображения, но они могут сделать выбор более удобным для некоторых ...

Смежные вопросы