Використання OpenGl з C #? [зачинено]


118

Чи є безкоштовні бібліотеки підтримки OpenGL для C #? Якщо так, то який я використовую і де я можу знайти зразкові проекти?

Чи забезпечує C # заняття для OpenGL?


Я знаю, що це надзвичайно стара нитка, але Єдність може вас зацікавити
clabe45

Відповіді:


129

OpenTK - це покращення порівняно з API Tao, оскільки він використовує ідіоматичний стиль C # з перевантаженням, сильно набраними перерахунками, винятками та стандартними типами .NET:

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

на відміну від Дао, який просто відображає 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 січня 2016 року . Сьогодні технічний керівник OpenTK відійшов від проекту , залишивши його майбутнє невизначеним. Форуми заповнені спамом. Обслуговувач рекомендує перейти до MonoGame або SDL2 #.

Оновлення 30 червня 2020 року : У OpenTK вже деякий час з’являються нові технічні засоби, які мають активну спільноту розбратів. Тому попередня рекомендація щодо використання іншої бібліотеки не обов'язково відповідає дійсності.


5
Я не думаю, що ці функції є дуже репрезентативними, тому що всі вони застарілі та видалені з основного профілю OpenGl.
Арн

6
Правда, ці функції видалено з основного профілю. Але аргументи все-таки справедливі. "OpenTK - це вдосконалення щодо API Tao, оскільки він використовує ідіоматичний стиль C # з перевантаженням, сильно набраними перерахунками, винятками та стандартними типами .NET"
Syaiful Nizam Yahya

1
Пов'язаний веб-сайт зараз недійсний для цієї публікації.
Sonny Childs

16

Я думаю, що мав на увазі @korona, оскільки це лише API C, ви можете споживати його безпосередньо з C # з цілком великим набором тексту:

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

Вам, на жаль, потрібно було б зробити це для кожної функції OpenGL, яку ви телефонуєте, і це в основному те, що Tao зробив для вас.


Як би ви зробили це в Linux (з моно)?
deceleratedcaviar

В основному саме так, mono-project.com/Interop_with_Native_Libraries
Джефф Мак

15

Дао, як вважається, є приємною основою.

З їх сайту:

Рамка Дао для .NET - це сукупність прив’язок для полегшення розробки межплатформних медіа-додатків з використанням платформ .NET і Mono.


1
Новий веб-сайт для Tao: Tao Framework
Тимін


7

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

Те, що він залишив, - це створити контекст, перш ніж ви можете використовувати будь-яку з функцій OpenGL. Це не важко, але є небагато інших не дуже інтуїтивних DllImports, які потрібно зробити.

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


5
ваше посилання мертве, будь ласка, можете поділитися своїм проектом. Дякую.
dangerousdave

7

Я також рекомендував би рамку Дао . Але ще одна додаткова примітка:

Погляньте на ці підручники: http://www.taumuon.co.uk/jabuka/


Я не маю уявлення, що сталося з Дао, коли сторінка знизилася досить давно.
Домінік К

Новий веб-сайт для Tao: Tao Framework
Тимін

1
Дао, здається, є рухомою ціллю. Я оновив посилання, тому що він також перемістився з моно зараз на sourceforge.
Олівер

Нічого, листопад 2005 року ... чи OpenGL не сильно змінився?
Jocull

1
@JonHarrop так, схоже, вони там не встановили переадресацію, використовуючи сторінку github зараз opentk.github.io
Dreamwalker

4

Що б ви хотіли, щоб ці бібліотеки підтримки працювали? Просто використовувати OpenGL від C # досить просто і не потребує додаткових бібліотек afaik.


У якому просторі імен можна знайти ці класи?
MegaByte

4
OpenGL не входить до .NET, версія версії 4.0
мафу

3
@MegaByte До них потрібно отримати доступ через виклик платформи.
Обмежене спокутування

2

Щодо (дещо поза темою, яку я знаю, але оскільки вона була викладена раніше) вибір XNA vs OpenGL, у кількох випадках може бути корисним перейти з OpenGL замість XNA (і в інших XNA замість OpenGL ...).

Якщо ви збираєтеся запускати програми на Linux або Mac за допомогою Mono, можливо, це буде хорошим вибором, щоб перейти з OpenGL. Крім того, що не так широко відомо, я думаю, якщо у вас є клієнти, які збираються запускати ваші програми в середовищі Citrix, то DirectX / Direct3D / XNA не буде настільки економічним вибором, як OpenGL. Причиною цього є те, що програми OpenGL можуть бути розміщені спільно на меншій кількості серверів (через проблеми з продуктивністю, один сервер не може розміщувати нескінченну кількість прикладних програм), ніж програми DirectX / XNA, які вимагають роботи спеціалізованих віртуальних серверів для роботи в апаратному забезпеченні прискорений режим. Існують інші вимоги, такі як підтримувані відеокарти тощо, але я буду дотримуватися проблеми XNA vs OpenGL. Як ІТ-архітектор, розробник програмного забезпечення тощо, це доведеться враховувати перед вибором між OpenGL та DirectX / XNA ...

Побічна примітка полягає в тому, що WebGL базується на OpenGL ES3 afaik ...

Надалі, це не єдині міркування, але вони можуть полегшити вибір для деяких ...


1

XNA 2.0 вимагає мінімум картки шейдера 1.1. Незважаючи на те, що старі технології, не у кожного є. Деякі новіші ноутбуки (за нашим досвідом планшети Toshiba з графікою Intel) не підтримують шейдер 1.1. XNA просто не буде працювати на цих машинах.

Це важливе питання для нас, і ми перейшли до Тао та OpenGL. Крім того, з Tao ми маємо прив'язки для аудіо та підтримки Lua.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.