ПредишенСледващото

В тази статия ще разгледаме писане на програми на Objective-C / Objectiver-C ++. работа с OpenGL библиотека. В този случай, за разлика от предишната статия, ние ще се възползват пълноценно от какао, използвайте Interface Builder да проектирате прозорци, използването на стандартни класове, за да заредите текстури и обработка на съобщения от мишката.

Така че нашата първа стъпка, както и преди, ще стартира XCode и избора на вида на приложение - "Какао кандидатстване".

Steps3d - уроци - програмиране за Mac OS X - OpenGL-напиши приложение, използващо какао

Фигура 1. Избор на вида на приложението.

Нека дадем името на проекта - OpenGL Какао пример и да определи пътя за него.

Steps3d - уроци - програмиране за Mac OS X - OpenGL-напиши приложение, използващо какао

Фигура 2. Укажете име и директория за приложението.

След създаването на проекта веднага да започнете работа с MainMenu.nib файл (причинявайки Interface Builder с двойно кликване върху файла).

Steps3d - уроци - програмиране за Mac OS X - OpenGL-напиши приложение, използващо какао

Фигура 3. Първи стъпки с MainMenu.nib.

За да работите с OpenGL в какаото най-удобен за използване на обектите, наследени от клас NSOpenGLView. Този клас съдържа почти всичко, което трябва да се работи с OpenGL, а в много случаи е достатъчно просто да се замени метод drawRect:.

Отворете прозорец проект Interface Builder "и раздел Уроци и започнете да пишете в полето за търсене на името на класа, от която ние искаме да бъде наследен - NSOpenGLView.

След като се коригира клас е намерен, изберете го и натиснете Enter. Това ще създаде нов клас, който наследява от NSOpenGLView, тъй като името му ще се изисква да MyOpenGLView.

Steps3d - уроци - програмиране за Mac OS X - OpenGL-напиши приложение, използващо какао

Фигура 4. Създаване на нов клас на базата на NSOpenGLView.

На следващо място, с помощта на командни Класовете на менюто / Създаване на файлове за MyOpenGLView. Ние ще създадем необходимите файлове за този клас (Фигура 5) и ги добавете към настоящия проект (Фигура 6).

Steps3d - уроци - програмиране за Mac OS X - OpenGL-напиши приложение, използващо какао

Фигура 5. Създаване на .m и .h файлове за новия клас.

Steps3d - уроци - програмиране за Mac OS X - OpenGL-напиши приложение, използващо какао

Фигура 6. Запазване на генерираните файлове.

Сега отворете палитрата обект на последния раздел, където можем да видим завършения обект да работи с OpenGL - NSOpenGLView.

Steps3d - уроци - програмиране за Mac OS X - OpenGL-напиши приложение, използващо какао

Фигура 7. Стандартни компоненти за работа с OpenGL и в мрежата.

Преместете го в прозореца на нашата молба и подравняване, както е показано на фигура 8.

Steps3d - уроци - програмиране за Mac OS X - OpenGL-напиши приложение, използващо какао

Фигура 8. Местоположение OpenGL-компонент в прозореца.

След това се определят параметрите автоматично оразмеряване, както на фиг. 9.

Steps3d - уроци - програмиране за Mac OS X - OpenGL-напиши приложение, използващо какао

Фигура 9. Определяне автоматично оразмеряване параметри.

Освен това, тъй като искаме да използваме обекта не е клас NSOpenGLView и класа на обекта, получени от него MyOpenGLView, ние трябва да се възползваме от възможността да Interface Builder "и изрично да се уточнява конкретното клас. За да направите това, отворете раздела инспектор и изберете Клас по поръчка, като клас действително използвани MyOpenGLView.

Steps3d - уроци - програмиране за Mac OS X - OpenGL-напиши приложение, използващо какао

Фигура 10. Инсталиране на класа в действителност се използва.

В допълнение към очевидната необходимост, за да изберете този клас се използва за задаване на редица атрибути, които са пряко свързани с работата с OpenGL. За да направите това, отворете раздела атрибути и определете OpenGL настройките както е показано на фиг. 11.

Steps3d - уроци - програмиране за Mac OS X - OpenGL-напиши приложение, използващо какао

Фигура 11. Определяне на настройките OpenGL.

Нека сега в XCode и MyOpenGLView.m файл, да зададете най-простото изпълнение на drawRect метода:.

Моля, имайте предвид, че в рамките на метода на drawRect, ние веднага се използва OpenGL команди. Също така имайте предвид, че изходното изображение означава непременно OpenGL завършен glFlush команда ().

Ако сега се събира и управлява нашата молба, ще видим черен правоъгълник вътре в нашата прозорец. Моля, имайте предвид, че ако промените размера на черната кутия на размера на прозореца се променят съответно.

Steps3d - уроци - програмиране за Mac OS X - OpenGL-напиши приложение, използващо какао

Фигура 12. приложение, което работи.

Ние променим нашата молба да ви покаже нещо по-смислено, отколкото само черен екран. Тук имаме един много полезен възможност за съчетаване на кода в C ++ и кода в Objective-C, като се използва Objective-C ++.

Преименуване на файла в XCode MyOpenGLView.m в MyOpenGLView.mm (да каже на компилатора, че този файл съдържа програма за Objective-C ++).

На следващо място, ние добавяме към нашия проект Vector2D.h файлове. Vector2D.cpp. Vector3D.h. Vector3D.cpp. Vector4D.h и Vector4D.cpp.

MyOpenGLView.mm също променя съдържанието на файла в следната обява.

Глобалните променливи и функция drawBox не носят никакви Mac OS X - спецификата и се използват, за да настроите на проектните параметри и се въртят на обекта.

Нека да разгледаме прекрои метод. Той е почти напълно равностоен на събитието манипулатор от реорганизиране на GLUT освен че новите измерения не се предават открито, но те трябва да се отстранят чрез изпращане на съобщения граници.

В отговор на това съобщение връща NSRect структура, съдържаща размер поле на размера на визуален компонент. Моля, имайте предвид, че размерът на дадена реална (флоат) номера.

Веднъж получени размерите, следва стандартен код не се различава от съответния код за GLUT.

Следващите стъпки ще добавят елемент с мишката и въртеливо текстури за подпомагане.

В подкрепа на въртенето на обект с мишката, което трябва да се предефинират методите на клас MyOpenGLView mouseDown: и mouseDragged:.

Първият от тези методи се нарича, когато някой от бутоните на мишката (ако все още вярваме, че Mac-ове имат само един бутон на мишката, тогава можете грешат много). Този метод се като параметър указател към обект NSEvent клас. предава цялата информация за събитието. От тази информация, ние се нуждаем само координатите на точката, в която имаше едно кликване на мишката. Тогава координира данни се съхраняват в променлива mouseOld.

За координати на мишката в момента на обекта на събитието е изпратил locationInWindow съобщение. която връща координатите на рамката на прозореца. След това можете да използвате метод convertPoint: fromView: клас NSView.

Този метод се използва за превод на координати от една координатна система, за да видите друг изглед координатна система. Ако вместо указател към обект от клас NSView от координатната система, чиито координати трябва да бъдат преведени, той се предава нула. в този случай прехвърлянето от прозореца координатна система, съдържаща активното изглед.

Mac OS X, разлика (например на GLUT) движения на мишката лесно (когато не натискате бутон на мишката) - това съответства на съобщението mouseMoved: - и да се движат мишката, докато държите някой от бутоните на мишката - това съответства на съобщението mouseDragged:.

Това разделение има смисъл - най-често се нуждаем, е последната вида на съобщението, а посланието от първия тип често могат да бъдат успешно игнорира. Ето защо, в Mac OS X е възможно да се включите / изключите изпращане на съобщението mouseMoved: (макар че може би това се дължи на наследството на NextStep'a и борбата за неговата скорост).

Всичко, което трябва да направите, в метода mouseDragged:. е да се намери разликата между предишните координатите на мишката и сегашното предизвикателство за тази разлика до регулиране на ъгъла на завъртане и съхранява текущата стойност на координати в mouseOld. След това ще трябва да си изпратите съобщение setNeedsDisplay: с параметър YES за задействане на съдържанието на пречертаването прозорец.

Подходящият метод код е показано по-долу.

За да заредите текстура от файл най-лесният начин да се възползват от готвене класове, предлагани от Mac OS X - поради този факт, ние се пригответе да поддържа голям брой на текстурата формати.

Издадена кодекс за зареждане на текстура от файл с име в отделен метод:

Както се вижда от по-горе код, съдържанието на файла с текстурата е заредена в NSData клас обект (с клас съобщение dataWithContentsOfFile :) а, защото създава образ във формата на NSBitmapImageRep клас инстанция (с помощта на съобщения imageRepWithData клас :), след което построен с главата надолу във вертикално изображение и зарежда в текстура OpenGL стандартен начин.

За съжаление зареждането на текстура от файл не трябва да се поставя в метода на първоначален * за този клас. Това се дължи на специфичното натоварване на писци, файловете се противопостави класове въведени от потребителя.

Ако стандартните класове Interface Builder може просто да поставите в перо-файл в архива компоненти с изображения с потребителски класове, че той не може да направи, тъй като тя не разполага с кода за тези класове.

В резултат на това в перо-файл постави някои данни, на които по време на зареждане, специално конструирани желания обект. Тази процедура е доста уникален и следователно да инициира такива обекти е по-добре да се използва съобщение awakeFromNib. изпратено до всеки обект, след като всички обектите на своето перо -file ще бъдат напълно заредени.

Ние ще използваме алтернативен подход (всъщност вариант на натоварване при поискване или мързелив оценка) - в drawRect метода: ние ще проверим за самоличност на текстурата (всички инстанция инстанция променливи в Objective-C е винаги инициализира с нула), а ако е нула, след това да създадете текстура чрез зареждане на изображението от файла.

Следващата фигура показва на екрана на програмата по същество.

Steps3d - уроци - програмиране за Mac OS X - OpenGL-напиши приложение, използващо какао

Фигура 13. крайното приложение.

Много удобно място за съхранение на текстури са програмни ресурси, а перо-файл. За да добавите текстура на писец-файлът е достатъчно, за да отворите Снимки и изтеглете файла на текстурата.

Тъй като писец-файла - това е всъщност една директория е част от каталога с приложения, нашата текстура файл е обикновен файл, лежи някъде в директорията на приложението. За пътя до изображението с даденото име трябва да използвате NSBundle клас и неговите методи.

Горният метод е да изтеглите loadTextureFromResource в OpenGL текстура от средствата за кандидатстване. За да направите това, първо трябва да се указател към обект NSBundle клас. Файла, съответстващ на писеца, където се изисква текстурата.

Ако искаме да се сложи тази текстура към основното перо-файл (MainMenu.nib), достъпът до нея е удобен за използване клас метод mainBundle. връща указател към обект от клас NSBundle, съответства на основното перо-файла.

След това, за да получите по пътя към файла с изображението на неговото наименование, използвани съобщения pathForImageResource: (за достъп до аудио ресурсите, които могат да използват pathForSoundResource съобщение за достъп до ресурсите на всякакъв вид е послание pathForResource :. OfType :).

След получен пътя на текстурата, се зарежда с предварително въведена loadTextureFromFile:.

Осъществено от uCoz

Подкрепете проекта - споделете линка, благодаря!