OpenGl mit C # verwenden? [geschlossen]


118

Gibt es kostenlose OpenGL-Unterstützungsbibliotheken für C #? Wenn ja, welches verwende ich und wo finde ich Beispielprojekte?

Bietet C # Klassen für OpenGL an?


Ich weiß, dass dies ein extrem alter Thread ist, aber Unity könnte für Sie von Interesse sein
clabe45

Antworten:


129

OpenTK ist eine Verbesserung gegenüber der Tao-API, da es den idiomatischen C # -Stil mit Überladung, stark typisierten Aufzählungen, Ausnahmen und Standard-.NET-Typen verwendet:

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

im Gegensatz zu Tao, das lediglich die C-API widerspiegelt:

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

Dies erschwert die Portierung, ist aber unglaublich benutzerfreundlich.

Als Bonus bietet es Schriftwiedergabe, Laden von Texturen, Handhabung von Eingaben, Audio, Mathematik ...

Update 18. Januar 2016 : Heute hat sich der OpenTK-Betreuer vom Projekt zurückgezogen und seine Zukunft ungewiss gelassen . Die Foren sind mit Spam gefüllt. Der Betreuer empfiehlt, zu MonoGame oder SDL2 # zu wechseln.

Update 30. Juni 2020 : OpenTK hat seit einiger Zeit neue Betreuer und eine aktive Zwietracht-Community. Die vorherige Empfehlung, eine andere Bibliothek zu verwenden, ist also nicht unbedingt richtig.


5
Ich denke nicht, dass diese Funktionen sehr repräsentativ sind, da sie alle veraltet und aus dem OpenGl-Kernprofil entfernt sind.
Arne

6
Richtig, diese Funktionen werden aus dem Kernprofil entfernt. Aber die Argumente sind immer noch gültig. "OpenTK ist eine Verbesserung gegenüber der Tao-API, da es einen idiomatischen C # -Stil mit Überladung, stark typisierten Aufzählungen, Ausnahmen und Standard-.NET-Typen verwendet"
Syaiful Nizam Yahya,

1
Die verlinkte Website ist für diesen Beitrag jetzt ungültig.
Sonny Childs

16

Ich denke, was @korona bedeutete, war, dass es nur eine C-API ist. Sie können es direkt aus C # mit einer Menge solcher Eingaben wie folgt verwenden:

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

Sie müssten dies leider für jede einzelne OpenGL-Funktion tun, die Sie aufrufen, und genau das hat Tao für Sie getan.


Wie würden Sie das unter Linux (mit Mono) machen?
Verlangsamte

Grundsätzlich genau das gleiche, mono-project.com/Interop_with_Native_Libraries
Jeff Mc

15

Tao soll ein schöner Rahmen sein.

Von ihrer Website:

Das Tao Framework für .NET ist eine Sammlung von Bindungen, um die plattformübergreifende Entwicklung von Medienanwendungen unter Verwendung der .NET- und Mono-Plattformen zu erleichtern.


1
Die neue Website für Tao ist: Tao Framework
Thymine

9

SharpGL ist ein Projekt, mit dem Sie OpenGL in Ihren Windows Forms- oder WPF-Anwendungen verwenden können.


7

Sie können OpenGL ohne Wrapper verwenden und nativ in C # verwenden. Genau wie Jeff Mc sagte, müssten Sie alle Funktionen, die Sie benötigen, mit DllImport importieren.

Was er ausgelassen hat, ist, einen Kontext zu erstellen, bevor Sie eine der OpenGL-Funktionen verwenden können. Es ist nicht schwer, aber es gibt nur wenige andere nicht so intuitive DllImports, die durchgeführt werden müssen.

Ich habe ein Beispiel-C # -Projekt in VS2012 mit fast dem Minimum erstellt, das erforderlich ist, um OpenGL unter Windows zum Laufen zu bringen. Es färbt nur das Fenster blau, aber es sollte ausreichen, um Ihnen den Einstieg zu erleichtern. Das Beispiel finden Sie unter http://www.glinos-labs.org/?q=programming-opengl-csharp . Suchen Sie unten nach dem Beispiel No Wrapper .


5
Ihr Link ist tot, bitte können Sie Ihr Projekt teilen. Vielen Dank.
gefährliche

7

Ich würde auch das Tao Framework empfehlen . Aber noch ein Hinweis:

Schauen Sie sich diese Tutorials an: http://www.taumuon.co.uk/jabuka/


Ich habe keine Ahnung, was mit Tao passiert ist, da die Seite vor einiger Zeit heruntergekommen ist.
Dominic K

Die neue Website für Tao ist: Tao Framework
Thymine

1
Tao scheint ein bewegliches Ziel zu sein. Ich habe den Link aktualisiert, da er jetzt auch von Mono zu SourceForge verschoben wurde.
Oliver

Wow, November 2005 ... ändert sich OpenGL nicht viel?
Jocull

1
@JonHarrop ja sieht aus wie sie nicht eine Umleitung dort mit einer Github Seite jetzt eingestellt opentk.github.io
Traum

4

Was möchten Sie mit diesen Support-Bibliotheken tun? Nur OpenGL von C # zu verwenden ist einfach genug und erfordert keine zusätzlichen Bibliotheken afaik.


In welchem ​​Namespace befinden sich diese Klassen?
MegaByte

4
OpenGL ist nicht Teil von .NET, ab Version 4.0
Mafu

3
@ MegaByte Der Zugriff auf sie muss über den Plattformaufruf erfolgen.
Begrenzte Versöhnung

2

In Bezug auf die Wahl von XNA gegen OpenGL (etwas abseits des Themas, das ich kenne, aber da es früher angesprochen wurde) kann es in mehreren Fällen von Vorteil sein, OpenGL anstelle von XNA (und in anderen XNA anstelle von OpenGL ...) zu verwenden.

Wenn Sie die Anwendungen unter Linux oder Mac mit Mono ausführen möchten, ist OpenGL möglicherweise eine gute Wahl. Was meiner Meinung nach nicht so bekannt ist: Wenn Sie Kunden haben, die Ihre Anwendungen in einer Citrix-Umgebung ausführen, ist DirectX / Direct3D / XNA keine so wirtschaftliche Wahl wie OpenGL. Der Grund dafür ist, dass OpenGL-Anwendungen auf einer geringeren Anzahl von Servern gemeinsam gehostet werden können (aufgrund von Leistungsproblemen kann ein einzelner Server nicht unendlich viele Anwendungsinstanzen hosten) als DirectX / XNA-Anwendungen, für die dedizierte virtuelle Server auf Hardware ausgeführt werden müssen beschleunigter Modus. Es gibt andere Anforderungen wie unterstützte Grafikkarten usw., aber ich werde mich an das Problem XNA vs OpenGL halten. Als IT-Architekt, Softwareentwickler usw. muss dies berücksichtigt werden, bevor Sie zwischen OpenGL und DirectX / XNA wählen können ...

Eine Randnotiz ist, dass WebGL auf OpenGL ES3 afaik basiert ...

Als weitere Anmerkung sind dies nicht die einzigen Überlegungen, aber sie könnten einigen die Auswahl erleichtern ...


1

Für XNA 2.0 ist mindestens eine Shader 1.1-Karte erforderlich. Während alte Technik, hat nicht jeder eine. Einige neuere Laptops (nach unserer Erfahrung Toshiba-Tablets mit Intel-Grafik) unterstützen Shader 1.1 nicht. XNA wird auf diesen Computern einfach nicht ausgeführt.

Dies ist ein wichtiges Thema für uns und wir sind zu Tao und OpenGL übergegangen. Außerdem haben wir mit Tao Bindungen für Audio- und Lua-Unterstützung.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.