3 Stimmen

Gibt es eine einfache Möglichkeit zum Öffnen eines (oder mehrerer) Opengl-Fenster in Mac OS X mit C++?

Ja, ich hasse Objective-C, und mein Projekt wird portabel sein, also möchte ich so viel wie möglich in C++ programmieren, idealerweise 100%.
Ich habe also ein normales C++-Projekt mit Xcode gemacht, und wollen einige OpenGL-Fenster zu öffnen.

edit: Verdammt, Glut übernimmt die Kontrolle über die App mit glutMainLoop() und ich würde gerne mehr Kontrolle über die Schleife haben.
Ich werde es mit Freeglut versuchen, obwohl ich keine OSX-Binärdateien finden kann, und ich habe immer so viel Pech, wenn ich versuche, den Code von jemand anderem zu kompilieren.

Aktualisierung:
Ich habe noch einmal versucht, einen Link zu SDL 1.3 zu erstellen, und dieses Mal hat es geklappt - juhu!
Ich wollte schon immer mit SDL arbeiten, aber die Verwendung von mehr als einem Fenster war obligatorisch, und das ist eine Funktion der Version 1.3, die sich in der Entwicklung befindet, und ich konnte sie nie zum Laufen bringen.
Da es auf eine Vielzahl von Betriebssystemen portabel ist und 2D-Grafiken ebenso gut wie OpenGL verarbeitet, werde ich es verwenden. Vielen Dank an alle!

3voto

Beanz Punkte 1927

Wenn Sie Objective-C nicht verwenden wollen, müssen Sie entweder die veralteten Carbon-Bibliotheken, X11 oder eine andere Bibliothek wie GLUT verwenden, um das Fenster zu erstellen. Wenn die Portabilität ein Anliegen ist, wählen Sie entweder die GLUT-Route oder Sie müssen für jede Plattform, die Sie unterstützen wollen, Ihren eigenen Fensterverwaltungscode schreiben.

Wenn Sie nicht die GLUT-Route gehen, müssen Sie für jedes Betriebssystem einen Code für die Fensterverwaltung schreiben. Ich schlage daher vor, dass Sie in den sauren Apfel beißen und die Fensterverwaltung in Objective C++ schreiben. Das einzige, was Sie wirklich wissen müssen, ist, dass ein Zeiger immer ein Zeiger ist, egal in welcher Sprache er ist, also speichern Sie einfach objective-c ids als void* und casten Sie sie zurück zu ids, es funktioniert eigentlich ziemlich einfach.

2voto

Voivoid Punkte 443

Ich schätze NeHe-Tutorials könnte helfen;

2voto

ergosys Punkte 45265

GLUT eignet sich gut für den von Ihnen genannten Zweck, obwohl Sie sich wahrscheinlich einen schönen C++-Wrapper dafür wünschen. Ich endete hacking meine eigene, und obwohl GLUT ist nicht freundlich zu wickeln, es war machbar.

EDIT: Da Sie ein Problem mit glutMainLoop() haben, könnten Sie versuchen, mehr zu tun, als GLUT vorgesehen ist - es ist hauptsächlich für Hacks, einmalige Projekte und Opengl-Demos gedacht. Und freeglut kompiliert nicht OOB auf dem Mac, zumindest war das meine Erfahrung.

Wenn Sie eine portable Anwendung mit mehr Funktionen benötigen, ist Qt vielleicht die richtige Wahl für Sie. Andernfalls entwerfen Sie Ihr C++ für Portabilität und verwenden Sie eine dünne GUI-Schicht auf jeder Plattform. Wenn es am wichtigsten ist, dass etwas auf jeder Plattform läuft, sollten Sie sich für Ersteres entscheiden. Wenn die beste Benutzererfahrung auf jeder Plattform am wichtigsten ist, sollten Sie sich für Letzteres entscheiden. Sie werden vielleicht feststellen, dass "dünn" nicht die beste Beschreibung für das ist, worum es geht.

Ich fand diese Demo nützlich, um ein einfaches Cocoa/OpenGL-Fenster zum Laufen zu bringen, auch wenn der Code eine Reihe von lächerlichen Fehlern hat: http://developer.apple.com/library/mac/#samplecode/CocoaGL/Introduction/Intro.html

1voto

marni Punkte 4068

Diese Frage wurde bereits vor über 3 Jahren gestellt, ist aber immer noch aktuell. Ich habe gerade vor kurzem durch ähnliche Übung für die Planung der Schule Lehrplan, und versuchen, herauszufinden, was ist die beste portable Bibliothek mit auf Mac/Windows/Linux/Mobile mit OpenGL-Projekten zu arbeiten. Vielleicht helfen meine Notizen jemandem, eine Entscheidung zu treffen. Ich erwähne nur die Haupt Optionen, die ich in Betracht gezogen habe.

APIs auf höherer Ebene für die Fensterverwaltung und zusätzliche Extras wie Sprites, Schriftarten, Sounds, Ereignisbehandlung usw:

  • SFML y Github-Repository nice&tidy, C++, objektorientierte Bibliothek, die sich nativ in OpenGL integriert. Portabilität für die Verwaltung von Windows und OpenGL 3.3 Kontexten auf MacOS, Win und Linux. Mobile Unterstützung im Zweig 2.2 (github).
  • SDL2 Alle wichtigen Plattformen, einschließlich mobiler Geräte, werden unterstützt. Der OpenGL-Kontext muss manuell verwaltet werden, so dass die Verwendung von GLEW zum Beispiel sehr nützlich ist (siehe unten). Ein bisschen niedrigeres Niveau als SFML.

APIs der unteren Ebene hauptsächlich für die Fenster- und OpenGL-Kontextverwaltung:

  • GLWF : Dies ist sozusagen ein GLUT-Ersatz für modernes OpenGL. Eher niedriges Niveau, aber portabel für: Win, OSX, Lin. In aktiver Entwicklung.
  • GLEW : Ich erwähne es nur der Vollständigkeit halber. Es verwaltet nicht Windows, sondern hilft bei der Verwaltung von OpenGL-Kontexten und man kann es z.B. zusammen mit GLWF oder SDL verwenden.

Andere:

  • Freeglut : Open-Source-Fortsetzung von GLUT. Geeignet für kleine Demoprojekte. Ich habe es nicht selbst benutzt, aber gute Dokumentationen und Democode gesehen. In aktiver Entwicklung.
  • GLUT: alt, nicht mehr lieferbar. Ältere Demos und Code im Netz.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X