OpenGL - Quickstart
2.1 OpenGL Set
Да започнем с най-важното, инсталирайте необходимия софтуер. Предполагам, че Windows вече е инсталиран и работи, в противен случай сте купили грешната книгата. На първо място, задайте MSVisualC ++ 6.0 и jdk113 или по-висока, ако искате да знаете за писане на Java аплети, използващи OpenGL. Но вие трябва само Java в седмата глава. На второ място, ние се нуждаем от изпълнението на библиотеката OpenGL. Той е включен с Windows95 / NT - това opengl32.dll библиотека glu32.dll. Можете също така да вземете OpenGL библиотеката от Silicon Graphics. Инструкции за инсталиране, предоставени там. Ще трябва да копирате и opengl.dll glu.dll в Windows \ система и сложи opengl.lib, glu.lib в Lib поддиректория, където сте инсталирали MSVisualC ++. На трето място, трябва четири от шаблона ми програма, които са на първоначалния скелет, че тогава ние ще запълни функционалност. Къде можете да получите OpenGL от Silicon Graphics, магьосник, JDK и моите програмни шаблони, обърнете се към "А" заявлението.
2.2 Нека си представим нещо
Най-простият обект, който ви позволява да видите пълната мощ на OpenGL, е сфера. Нека се опитаме да го представят. За да направите това, да създадете нов проект в VisualC ++, изпълнете следните стъпки:
- Започнете MSVisualC ++ 6.0
- Кликнете върху менюто File-> новообза-> Win32 Console Приложението.
- Изберете директорията и името на проекта, въведете - сфера, а след това щракнете върху OK.
Пазя всички свои проекти на D диск в директорията на проекти. Проекти разклоняващи допълнителни поддиректории с бази данни, комуналните услуги, графики и Java-приложения. Като цяло, се опитват да определят разумни имена и извършване на разумна структура директория. Това е един много сериозен проблем.
Меню която живееше> Execute Sphere.exe
Източникът файл тук. Изпълним тук.
Сега аз ще ви обясни целта на тези две функции, които сте добавили в параграф 9. функция glColor3d определя текущия цвят, който ще бъде съставен форми. Тук е необходимо да се обясни как да зададете цвят и общата философия в OpenGL име на функция. Цвят определени четири параметъра: червено, синьо, зелено и прозрачни. Тези параметри варират в границите от нула до един. Четвъртият параметър, не сме необходими, така че ние, наречен glColor с три параметъра. В този случай, на четвъртия параметър, прозрачност, по подразбиране се приема за единство, т.е. напълно непрозрачен, нула - ще бъде напълно прозрачен. От езика C не се претоварва функции следния синтаксис да се обадя функции - FuncionName [п = брой параметри] [настройки за типа]. От следните типове:
- б - GLbyte байта
- и - GLshort кратко число
- аз - блясък цяло
- F - GLfloat фракционна
- г - GLdouble фракционна двойна точност
- UB - GLubyte неподписани байта
- нас - GLushort неподписан кратко число
- UI - GLuint неподписан
- V - п параметри от масив от този вид
В нашия случай - glColor3d - означава, че функцията отнема три параметъра GLdouble тип. Тя също може да доведе до glColor3i, т.е. Три параметри блясък тип. Ако типът параметър на кратко число, число или дълги байта, цвят компонент се дава интервала [0,1]. С въвеждането на тази гама се извършва по следния начин. В случай на грозен вид е най-голямата възможна стойност за единство, нула, нула. Ако знакът е максималната стойност за единство или единство минус, минус един и се свежда до единство. Wise, и просто не разбирам. На практика, вие ще използвате един от трите случая, описани като пример по-долу. Например, за неподписан намаляване на байт се извършва съгласно следната формула: znachenie_peremennoy_hranimoy_v_bayte / 255, тъй Максималният брой 255, се съхраняват в един байт. функция GlColor3dv означава, че като параметри, предавани GLdouble масив от три вида елементи. Например:
auxSolidSphere функция - обръща областта на радиуса на произход и единица. Осветление, създаване на лампи и монтаж позиция на камерата, ще разгледаме по-късно, но за сега нека да са усвоили по-добре и се чувстват, как всичко е просто. под мое ръководство, първата програма, които вече сте написали. Сега следват независими упражнения.
2.3 Упражнение: "Триизмерни фигури"
AuxSolidSphere Сменете функция към функция от следните със съответните параметри. Стойностите на параметрите, определени по реда на един - 0.5-1.7. Ако зададете твърде малки размери, цифрата ще е трудно да се види; ако е прекалено голям, той бъде скъсено. Това се дължи на факта, че на ръба, тъй като тя ще излезе от монитора.
- auxSolidCube (широчина) // куб
- auxSolidBox (ширина, височина, дълбочина) // кутия
- auxSolidTorus (R, R) // Torr
- auxSolidCylinder (R, височина) // цилиндър
- auxSolidCone (R, височина) // конус
- auxSolidIcosahedron (широчина) // polyhedra
- auxSolidOctahedron (ширина)
- auxSolidTetrahedron (ширина)
- auxSolidDodecahedron (ширина)
- auxSolidTeapot (широчина) // обръща Maker
С по-горе характеристики, можете да се направи солидна форма. Ако трябва да се направи превод, вместо да пишете Solid Тел.
2,4 Преходът към новите координати
Ние продължаваме да се направи триизмерни форми. В предишния раздел, сте научили как да се направи примитивни триизмерни обекти. Но проблемът е, че те са съставени само в основата, т.е. в (0,0,0). За да се изобразяват в обхвата на точката (x0, Y0, z0), е необходимо да се движи произхода до този момент, т.е. че е необходимо да отидете на новите координати. Тази процедура е доста разпространена в програмните графика и анимация. Често това е много удобно да се премине на координатите на нова точка и да ги превърне в желания ъгъл, и вашите изчисления драстично опростени. Конкретен пример ще бъде обсъдено по-долу, когато се научите да програмирате анимация. И докато не се научат как да се премине към новите координати. За да се премине към новите координати в OpenGL има две функции:
Първата функция измествания началото на координатната система (D х, у D, D Z). Второ - й завърта на ъгъл на часовниковата стрелка около вектора (x0, Y0, z0). Сега тя трябва да се каже за две много важни функции:
Те са предназначени за опазване и възстановяване на текущата позиция. Не съм тук, за да се даде пример за това как неудобно да се движат от една координатна система в друга, и не забравяйте, всичките си реализации. Много по-лесно с помощта на glPushMatrix (), за да запаметите текущото местоположение, а след това се премести, спин, колкото искате, и след това, наричайки glPopMatrix се върнем към старите координати. Така че, това е време да експериментирате. Създаване на нов проект, като повторите стъпките под 2.2. Просто го наречете sphere2. Първо, ние вземе предвид промяната на координатите. Поставете функция показва следния код:
Сега събира и стартирате програмата.
Меню която живееше> Execute Sphere.exe
Източникът файл тук. Изпълним тук.
2.5 Упражнение: "Избройте триизмерни фигури"
Използване на списъка с характеристики от предишното упражнение, начертайте цифрите в две колони. Ляв тел. Право стабилно.
Забележка: Тук искам да отбележа, че във версията на glaux.lib на Microsoft, са следните бъг: цилиндър и конус са съставени винаги или тел или твърдо. Ако сте за първи цилиндър / конус в програма, съставена тел, след това продължете всички цилиндри / конуси ще жица. Съответно, ако първият е твърд фигура, тогава всички ще бъде допълнително твърдо вещество. Ето защо, не се паникьосвайте. Има бъг Microsoft. Също така мога да ви моля, по-долу ще ви покажа как да получите около този проблем.
Източникът файл тук. Изпълним тук.
2.6 въртяща се координатна
А сега да разгледаме въртенето координати. Създаване на нов проект, наречен Rotate. Преименуване glaux.c в rotate.c В функция дисплей, поставете следния код:
Както можете да видите, конуса е включен в абсолютни координати. Така че, за да се направи форма не е в основата, е необходимо да:
- запишете текущото си местоположение
- премести (glTranslated), завъртете (glRotated)
- изготвят какво искат
- да се върнете към старите координати
GlPushMatrixglPopMatrix повиквания могат да бъдат вложени, т.е.
Естествено броя на обажданията glPopMatrix трябва да съответства на броя glPushMatrix разговор, в противен случай ще отлети на сцената в неизвестна посока. Максимално допустимото дълбочината на разполагане glPushMatrix / glPopMatrix определя, както следва:
OpenGL спецификация, за да се гарантира, че дълбочината на стека не може да бъде по-малко от 32.
2.7 Упражнение: "Снежен човек"
Използвайки функцията glRotate, направи снежен човек. Три сфери ОСП - носа конус - също конуса, окото - площ на устата може да направи квадрат - glBox.
Източникът файл тук. Изпълним тук.
Забележка: Има още една грешка в glaux.lib от Microsoft. Изглежда, последното от които намерих. Функция о [Solid / телена] Цилиндър преди боядисване цилиндрови смени и се върти координати. Така че, ако вече са се преориентирали и се обърна позицията, цилиндърът е съставен не е мястото, където се очаква. Потребителите на Microsoft, разбира се, ще бъдат сигурни, че тази функция и ще ви предложат да изтеглите редовно ServicePack. ;-) Аз по-долу ви кажа как да бъде по-правилно да се направи цилиндри и конуси. Ако не можете да чакате, следното е коригиран кода тези функции. Повечето от вас вече са го пропуснете и да се премести към следващото много интересен раздел - "анимация". И го направя така. За да поправите грешката ще бъде върнат, когато малкият майстор. Но реших да дам кода за грешка Microsoft определя тук. Можете да възстановят glaux.lib, подмяна на съответния код shapes.c файл. Къде мога да намеря сорс кода, обърнете се към "А" заявлението. По мое мнение, те са в MSDN.
2.8 Анимация
Нека да съживим снежен човек и добавяне на интерактивност. За да направите това, да рамки и да реагира на външни събития от клавиатурата или мишката. За да се направи техния персонал трябва по някакъв начин се прави разлика. За да направите това, ще се въведе една променлива функция дисплей време тип Int с модификатора статична. Създаване на нов проект на дисплея, въведете следната функция: "статичен вътр път = 0;". Модификатор на статичен означава, че променливата ще се съхраняват, когато функцията. Първоначалната стойност, ние свежда до нула. Ако дисплеят не зависи от времето, броячът рамка не може да се запази. Сега добавете следните редове:
Изпълнението на приложението, ще видите, че снежен човек запълзя по оста X. Ето как можете да направите анимация. Т.е. Сега координатите на обектите се изчисляват в зависимост от времето. Дадох един прост пример. Най-общо казано, за сложни графики програмиране, ще трябва да изчисли координатите на всеки обект въз основа на времето.
Източникът файл тук. Изпълним тук.
С цел да се отговори на клавиатура или мишка, трябва да се дефинира функция, която ще се нарича, когато потокът на събития от клавиатурата или мишката. За клавишите на клавиатурата дефинирате функция с имеНаФункцията следния прототип невалидни обратно повикване (свободен) и да го инсталирате като манипулатор за определен бутон - auxKeyFunc (key_code, имеНаФункцията); key_code видите в glaux.h. Пример: auxKeyFunc (AUX_LEFT, имеНаФункцията) Тук можете да зададете имеНаФункцията като функция, която ще се нарича, когато натиснете на клавиатурата "стрелка нагоре" ключ.
Mouse инсталирате манипулатор функция функция мишка събитие наричаме auxMouseFunc (бутон вътр, вътр действие, AUXMOUSEPROC). Променлива бутон може да се зададе - AUX_LEFTBUTTON, AUX_MIDDLEBUTTON, AUX_RIGHTBUTTON. Променлива действие отнема следните стойности - AUX_MOUSEDOWN, AUX_MOUSEUP, AUX_MOUSELOC. AUXMOUSEPROC функция трябва да има прототип - нищожно обратно повикване имеНаФункцията (AUX_EVENTREC * събитие), която се определя като AUX_EVENTREC
За повече информация, вижте на справочници и изходния код за OpenGL Спомагателен библиотека библиотека. Тази книга е за OpenGL, отколкото по програмиране потребителски интерфейси. Ето защо, за вида на информацията, която ще трябва да отидете на съответната референтна ръководство за Win API, MFC, Java и т.н.
В имеНаФункцията можете да промените всяка глобална променлива, и, съответно, дисплей функция ще изготви рамки, в зависимост от променливата.
2.9 Упражнение: "Arkanoid"
Напиши игра "Arconoid" - летяща топка, долната подложка, потребителят работи клавишите със стрелки или щанда на мишката и обезкуражава топка.
Източникът файл тук. Изпълним тук.
2.10 Резюме
В тази книга, тази глава е приключила. Вие се научили как да се направи триизмерни обекти и направи интерактивни анимации с помощта на тези обекти. Това по принцип е достатъчно да напишете примитивни програми. В следващата глава ще научите как да се направи примитивни обекти: точки, линии, полилинии и многоъгълници.