Как запустить OpenGL на OSX - PullRequest
12 голосов
/ 06 июля 2010

Я обычно программирую на Windows, но я получил MacBook Pro из своей школы, поэтому я пытаюсь создать приложение OpenGL для OSX.Я скачал и установил XCode, но понятия не имею, как запустить простое приложение OpenGL.Я бы предпочел не использовать Objective-C, но я определенно не хочу использовать GLUT.Может ли кто-нибудь указать мне правильное направление?

Ответы [ 6 ]

11 голосов
/ 06 июля 2010

Самая большая разница между OpenGL в OS X по сравнению со всем остальным - это расположение заголовочных файлов. На OS X:

#include <OpenGL/gl.h>
#include <OpenGL/glu.h>
#include <GLUT/glut.h>

Если вы хотите держаться подальше от Objective-C / Cocoa и GLUT, вы можете попробовать SDL , которая является кроссплатформенной игровой библиотекой (окна, 2D графика, звук, ввод и т. *

Edit: забыл про флаги компилятора, которые выложил mipadi, а именно:

-framework OpenGL
7 голосов
/ 20 ноября 2012

Этот вопрос в интернете очень старый, но самый простой способ ... просто поболтать в Objective-C ... Извините.

Мой общий подход к этому таков:

  • Вы можете продолжать выполнять все свои основные программы на C ++, без проблем.
  • Создайте новое «приложение какао» в XCode.
  • В конструкторе интерфейсов (где вы редактируете свой файл .xib) найдите объект NSOpenGLView в браузере объектов и нажмите его в своем окне.
  • Этот бит важен : В инспекторе объектов измените подкласс на свой собственный подкласс (что еще нужно сделать). Вы можете назвать его как угодно, например MyRenderer или что-то еще.
  • Нажмите [cmd] + [n] и создайте новый класс Objective-C, MyRendere r.
  • Внимание! Измените расширение с MyRenderer.m на MyRenderer.mm. Таким образом, XCode знает, что он должен компилироваться для Objective-C ++ вместо Objective-C.
  • В MyRenderer.mm переопределите как минимум следующими методами NSOpenGLView.
    • - (void) awakeFromNib: здесь выполняется инициализация класса. Не инициализируйте здесь OpenGL, иначе ваша программа вылетит.
    • - (void) drawRect:(NSRect)dirtRect: здесь вы можете рисовать.
    • - (void) prepareOpenGL: здесь можно инициализировать OpenGL.
    • - (void) reshape:(NSRect)bounds: для случаев, когда размер представления изменяется.

Хорошей новостью является то, что вы можете свободно смешивать функции и классы C ++ внутри MyRenderer.mm. Вы также можете использовать директивы C ++ #include вместе с директивами Objective-C #import. Вы можете делать C ++ внутри drawRect без проблем.

Плохая новость заключается в том, что NSOpenGLView не перерисовывает сцену каждые x миллисекунд. Он будет перерисовывать сцену, только когда почувствует, что это необходимо. Для этого вам придется использовать класс NSTimer Какао.

Редактировать: Дополнительное примечание: в методе drawRect обязательно вызовите glFlush(), а также [[self openGLContext] flushBuffer]. По какой-то причине только вызов [[self openGLContext] flushBuffer] ничего не привлекает для просмотра.

2 голосов
/ 15 марта 2013

Я использовал этот сайт в качестве справочного материала для моего проекта для Windows, Mac и Linux. http://ysflight.in.coocan.jp/programming/fssimplewindow/e.html

Автору удалось написать множество хороших примеров, которые помогут вам приступить к работе над проектом на всех платформах.

Конечным моментом является то, что вам нужно использовать Objective-C для создания вашего окна, и вы можете запрограммировать остальную часть кода, используя C ++.

1 голос
/ 06 июля 2010

Поскольку вы программируете на Mac, вы можете использовать любой знакомый вам язык.XCode поддерживает компиляцию C ++, поэтому, если вы знакомы с OpenGL в Windows, это прямой переход, хотя вам нужно будет использовать надлежащие методы для создания окна OSX (скорее всего, какао).

ЕслиPython - это ваша идея, PyOpenGL - это привязка Python к OpenGL, которая является кроссплатформенной.

1 голос
/ 06 июля 2010

При использовании OpenGL в Mac OS X необходимо помнить о двух вещах:

Во-первых, вы должны связать каркас OpenGL.Вне Xcode вы можете передать флаг -framework компоновщику:

$ gcc -framework OpenGL -o my_opengl_program my_opengl_program.c

(обратите внимание, что этот флаг работает только в OS X).

Если вы используете Xcode,вы можете просто добавить OpenGL.framework к вашим связанным фреймворкам.

Два, вы ставите префикс OpenGL/> перед заголовками OpenGL.Например, чтобы включить gl.h, используйте:

#include <OpenGL/gl.h>

В противном случае программирование с помощью OpenGL в Mac OS X в значительной степени совпадает.

0 голосов
/ 06 июля 2010

Необъективная библиотека C: AGL .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...