2012-06-26 3 views
0

Я изучаю программирование OpenGL на Mac OS X. Хотя существует довольно много информации по этой теме для тех, кто программирует на простых C, C++ и даже Python, очень мало там для разработчиков Objective-C/Cocoa, и многое из того, что существует, ужасно устарело (мы говорим 2002-2006, вечность назад в технике). Из-за этого трудно найти точную и актуальную информацию, что побуждает меня задавать этот вопрос: через какой путь разработчики Obj-C/Cocoa чаще всего используют OpenGL (в частности, в 3D-рендеринге) в наши дни?Работа с OpenGL через Objective-C/Cocoa

Кроме того, я убежден, что для большей части OpenGL нет привязок Objective-C/Cocoa. Это правда?

Я могу изучить другой язык, если это необходимо, но я бы предпочел придерживаться Obj-C, если это вообще возможно, что позволило мне сосредоточить время на изучении OpenGL, а не на целом языке программирования (C++ выглядит особенно пугающим).

ответ

1

На данный момент нет обширной привязки Objective-C к OpenGL. Если у вас есть учетная запись разработчика Apple, я бы порекомендовал вам проверить видео в WWDC этого года, чтобы узнать, изменится ли это в ближайшем будущем.

Если вы хотите узнать, как использовать OpenGL 3.2 от Objective-C/Cocoa, взгляните на tutorial I created a while ago.

3

Насколько я знаю, для OpenGL нет обертки Obj-C, поэтому вы вынуждены использовать C API. Кроме того, попытка обернуть его в объекты бесполезно, потому что запись 3D-графики связана с производительностью, а использование функций C намного быстрее, чем использование методов объектов.

Objective-C основан на C, поэтому вы можете свободно использовать C OpenGL API в своих приложениях Cocoa. Что касается привязки, в Cocoa вы можете подклассифицировать NSOpenGLView для привязки к OpenGL. Вы можете переопределить методы, такие как:

- (void)prepareOpenGL; для создания текстур, установить рисунок состояния и т.д.

- (void)reshape; обновить проекцию, когда представление изменяет размер.

И самое главное, вы можете переопределить:

- (void)drawRect: сделать свой собственный рисунок.

1

Поскольку Objective-C является надмножеством C, вы можете свободно включать/вызывать коды C в/из кода Objective-C. Аналогично, Objective-C++ (с расширением .mm) может разрешать модули C++ в Onjective-C++. Я считаю, что это основная причина, по которой Cocoa не предоставляет оболочку для OpenGL API.

Я бы отделил всю часть OpenGL от проекта Cocoa, используя MVC design. То есть напишите компонент Model, содержащий все коды OpenGL, написанные на C/C++, и создайте компоненты Controllere и View внутри Cocoa, например NSOpenGLView может быть компонентом Controller и View.

Главным преимуществом MVC является компонент модели (часть OpenGL), полностью независимый от операционных систем, и его можно повторно использовать на других платформах без каких-либо изменений. Недостатком является то, что вам необходимо использовать C/C++ и Objectivie-C в среде Cocoa.

У меня есть an example of OpenGL GUI program using MVC design (с исходными кодами). Тот же модуль OpenGL используется как для Windows, так и для Mac.

Смежные вопросы