Używasz OpenGl z C #? [Zamknięte]


118

Czy są dostępne bezpłatne biblioteki obsługujące OpenGL dla C #? Jeśli tak, z którego korzystam i gdzie znajdę przykładowe projekty?

Czy C # udostępnia klasy dla OpenGL?


Wiem, że to bardzo stary wątek, ale Unity może Cię zainteresować
clabe45

Odpowiedzi:


129

OpenTK jest ulepszeniem w stosunku do Tao API, ponieważ używa idiomatycznego stylu C # z przeciążeniem, silnie wpisanymi typami wyliczeń, wyjątkami i standardowymi typami .NET:

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

w przeciwieństwie do Tao, które po prostu odzwierciedla 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

To sprawia, że ​​portowanie jest trudniejsze, ale jest niesamowicie przyjemne w użyciu.

Jako bonus zapewnia renderowanie czcionek, ładowanie tekstur, obsługę danych wejściowych, audio, matematykę ...

Aktualizacja 18 stycznia 2016 : Dziś opiekun OpenTK odszedł od projektu , pozostawiając niepewną przyszłość. Fora są pełne spamu. Opiekun zaleca przejście na MonoGame lub SDL2 #.

Aktualizacja 30 czerwca 2020 : OpenTK ma już od jakiegoś czasu nowych opiekunów i aktywną społeczność discorda. Zatem poprzednie zalecenie dotyczące korzystania z innej biblioteki niekoniecznie jest prawdziwe.


5
Nie sądzę, aby te funkcje były zbyt reprezentatywne, ponieważ wszystkie są przestarzałe i usunięte z podstawowego profilu OpenGl.
Arne

6
To prawda, że ​​te funkcje zostały usunięte z głównego profilu. Ale argumenty są nadal aktualne. „OpenTK jest ulepszeniem w stosunku do Tao API, ponieważ używa idiomatycznego stylu C # z przeciążeniem, silnie wpisanymi typami wyliczeń, wyjątkami i standardowymi typami .NET”
Syaiful Nizam Yahya

1
Połączona witryna jest teraz nieprawidłowa dla tego postu.
Sonny Childs

16

Myślę, że @korona miał na myśli, ponieważ jest to tylko C API, możesz go używać bezpośrednio z C #, używając ogromnej ilości pisania w ten sposób:

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

Niestety, musiałbyś to zrobić dla każdej wywoływanej funkcji OpenGL i jest to w zasadzie to, co zrobił dla ciebie Tao.


Jak byś to zrobił w Linuksie (z mono)?
zwolnił


15

Tao ma być fajnym frameworkiem.

Z ich witryny:

Tao Framework dla .NET to zbiór powiązań ułatwiających tworzenie wieloplatformowych aplikacji multimedialnych z wykorzystaniem platform .NET i Mono.


1
Nowa strona internetowa dla Tao to: Tao Framework
Thymine


7

Możesz OpenGL bez opakowania i używać go natywnie w C #. Tak jak powiedział Jeff Mc, należałoby zaimportować wszystkie potrzebne funkcje z DllImport.

Pominął konieczność stworzenia kontekstu, zanim będzie można użyć którejkolwiek z funkcji OpenGL. Nie jest to trudne, ale istnieje kilka innych niezbyt intuicyjnych plików DllImport, które należy wykonać.

Stworzyłem przykładowy projekt C # w VS2012 z prawie absolutnym minimum niezbędnym do uruchomienia OpenGL na Windowsie. Maluje tylko okno na niebiesko, ale powinno wystarczyć, aby zacząć. Przykład można znaleźć pod adresem http://www.glinos-labs.org/?q=programming-opengl-csharp . Poszukaj przykładu No Wrapper na dole.


5
Twój link nie działa, czy możesz udostępnić swój projekt. Dzięki.
dangerousdave

7

Poleciłbym również Tao Framework . Ale jeszcze jedna uwaga:

Spójrz na te samouczki: http://www.taumuon.co.uk/jabuka/


Nie mam pojęcia, co się stało z Tao, kiedy strona spadła dość dawno temu.
Dominic K

Nowa strona internetowa dla Tao to: Tao Framework
Thymine

1
Tao wydaje się być ruchomym celem. Zaktualizowałem link, ponieważ został on również przeniesiony z mono na sourceforge.
Oliver

Wow, listopad 2005 ... czy OpenGL niewiele się zmienia?
wesoły

1
@JonHarrop yeah wygląda na to, że nie ustawili tam przekierowania za pomocą strony github teraz opentk.github.io
Dreamwalker

4

Co chciałbyś, aby zrobiły te biblioteki wsparcia? Samo używanie OpenGL z C # jest dość proste i nie wymaga żadnych dodatkowych bibliotek afaik.


W jakiej przestrzeni nazw można znaleźć te klasy?
MegaByte

4
OpenGL nie jest częścią .NET, od wersji 4.0
mafu

3
@MegaByte Muszą być dostępne poprzez wywołanie platformy.
Limited Atonement

2

Jeśli chodzi o (nieco poza tematem, który znam, ale ponieważ został omówiony wcześniej) wybór XNA vs OpenGL, w kilku przypadkach może być korzystne wybranie OpenGL zamiast XNA (aw innych XNA zamiast OpenGL ...).

Jeśli zamierzasz uruchamiać aplikacje w systemie Linux lub Mac przy użyciu Mono, dobrym wyborem może być OpenGL. Co więcej, co nie jest tak szeroko znane, jak sądzę, jeśli masz klientów, którzy będą uruchamiać twoje aplikacje w środowisku Citrix, to DirectX / Direct3D / XNA nie będzie tak ekonomicznym wyborem jak OpenGL. Powodem tego jest fakt, że aplikacje OpenGL mogą być współhostowane na mniejszej liczbie serwerów (ze względu na problemy z wydajnością pojedynczy serwer nie może obsługiwać nieskończonej liczby instancji aplikacji) niż aplikacje DirectX / XNA, które wymagają dedykowanych serwerów wirtualnych do działania sprzętowego tryb przyspieszony. Istnieją inne wymagania, takie jak obsługiwane karty graficzne itp., Ale będę trzymać się kwestii XNA vs OpenGL. Jako architekt IT, programista itp. Należy to wziąć pod uwagę przed wyborem między OpenGL i DirectX / XNA ...

Na marginesie jest to, że WebGL jest oparty na OpenGL ES3 afaik ...

Na marginesie, nie są to jedyne rozważania, ale niektórym mogą ułatwić wybór ...


1

XNA 2.0 wymaga co najmniej karty cieniującej 1.1. Chociaż stara technologia, nie każdy ją ma. Niektóre nowsze laptopy (z naszego doświadczenia tablety Toshiba z grafiką Intel) nie obsługują modułu cieniującego 1.1. XNA po prostu nie będzie działać na tych maszynach.

Jest to dla nas znaczący problem i przeszliśmy na Tao i OpenGL. Dodatkowo w Tao mamy wiązania do obsługi audio i Lua.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.