Как да си направим куб в opengl
OpenGL е 3D инструмент за програмиране, който ви позволява да създавате сложни триизмерни изображения от прости форми. От тази статия ще научите как да рисувате с него ще помогне на обикновен куб, който може да се завърти в три измерения!
Стъпка
Част 1 от 3:
Първоначална инсталацияедин. Инсталирайте OpenGL. Старт S OpenGL монтажни ръководства на вашия компютър. Ако OpenGL и компилаторът с вас вече имате, можете да пропуснете тази стъпка и да преминете към следващата.
2. Създайте документ. Създайте нов файл в любимия си код за код и го запазете като mycube.° С
3. Добавете # uncludes. Ето основните директиви #include, които ви трябва. Важно е да се помни, че директивите за различни операционни системи са различни и затова е необходимо да се избере всичко, така че програмата да е универсална и може да бъде пусната в която и да е система.
// включва # включва#Include #Include #Define gl_gelxt_prototypes # ifdef __apple __ # включва # друго # включва #endif
4. Добавете функционални прототипи и глобални променливи. Следващата стъпка ще декларира функционалните прототипи.
// Функционален прототипизоиден дисплей () - Void Specialkeys () - // Global VariablesDeble Rotate_y = 0-Double Rotate_X = 0-
пет. Задайте основната () функция.
Int main (int argc, char * argv []) // инициализиране на минута и процеси на потребителски параметриЛутинит (и argc, argv) - // заявете двоен буферен прозорец, z-буферизация и цветова схема истински colorglutinitdisplaymode (Glut_Double
Част 2 от 3:
Функция на дисплея ()един. Разберете заданието на функцията на дисплея (). Цялата работа по рисуване на Куба ще падне върху нестабилните линии на тази функция. Идеята като цяло е следната: нарисувате шест отделни лица на куба и ги поставете в подходящите позиции.
- За всяко лице ще дефинирате четири ъгъл и отворете ги с линии и попълнете цвета, който сте избрали. По-долу ще кажа как да го направя.
2. Добавете функцията Glclear (). На първо място, работещи с тази функция, ние се нуждаем Ясен цвят и z буфер. Без това под новия модел ще се видят стари и обектите, изтеглени от програмата, ще бъдат подредени неправилно.
Void дисплей () gl_depth_buffer_bit)-
3. Добавете Glbegin () и Glend (). Обектите OpenGL са комбинации от различни полигони. Екип Glbegin () Позволете ни да нарисуваме обект с вас - това е като молив, който рисувате фигура, без да я разкъсвате от хартия. Да разкъсате молива от листа и да започнете да рисувате нещо ново, имате нужда от екип Гледай (). В тази статия ще използваме GL_Polygon за изтегляне на всеки ръб на куба, въпреки че е възможно да използвате други параметри като GL_Line, GL_QUAD или GL_TRIANGLE за създаване на други форми.
// Multicolor Side - фронтглбектин (gl_polygon) - // стихове Добавяне в следващата петна ()-
4. Добавете функцията GLVERTEX3F (). Сега, когато сте обяснили програмата, която искате да започнете да рисувате многоъгълник, имате нужда Задайте върхове Обект. Функцията GLVERTEX има няколко форми, чието използване зависи от това, което възнамерявате да направите с вашия обект.
// Multicolor Side - фронтглбектин (gl_polygon) -glvertex3f (-0.петдесет души.петдесет души.5) - // p1glvertex3f (-0.5.0.петдесет души.5) - // p2glvertex3f (0.5.0.петдесет души.5) - // p3glvertex3f (0.петдесет души.петдесет души.5) - // p4glend ()-
пет. Добавете функцията GLColor3F (). Glcolor действа по много начини, подобно на Glvertex. Точки, които можете да зададете типове данни кратко, цяло число, двойно или поплавък. Всеки цвят има стойност от 0 до 1. Всички нули са черни, всички единици - съответно, бели. Фигура 3 в glcolor3f () показва RGB цветова схема без алфа канал. Цветовете на алфа канал са отговорни за прозрачността му. За да промените стойността на алфа канал, използвайте glcolor4f () с последния параметър от 0 до 1, т.е. от непрозрачна до прозрачност.
// Multicolor Side - фронтглбектин (gl_polygon) -glcolor3f (1.0, 0.0, 0.0) -glvertex3F (0.петдесет души.петдесет души.5) - // P1 Redglcolor3F (0.0, 1.0, 0.0) -glvertex3F (0.5.0.петдесет души.5) - // p2 greenglcolor3f (0.0, 0.0, 1.0) -glvertex3F (-0.5.0.петдесет души.5) - // p3 blueglcolor3f (1.0, 0.0, 1.0) -glvertex3F (-0.петдесет души.петдесет души.5) - // p4 purpleglend ()-
6. Нарисувайте други лица Куба. По-добре, разбира се, ако сами намират местоположението на останалата част от куба и всеки от върховете, но в името на простотата, която ги изчислихме за вас. Кодът е даден Б Последният функционален дисплей () По-долу.
// бяла страна - outglbegin (gl_polygon) -glcolor3f (1.0.1.0, 1.0) -glvertex3F (0.петдесет души.петдесет души.5) -glvertex3F (0.5.0.петдесет души.5) -glvertex3F (-0.5.0.петдесет души.5) -glvertex3F (-0.петдесет души.петдесет души.5) -glend () - // Violet Side - Rursglbegin (gl_polygon) -glcolor3f (1.0,0.0.1.0) -glvertex3F (0.петдесет души.петдесет души.5) -glvertex3F (0.5.0.петдесет души.5) -glvertex3F (0.5.0.5.0.5) -glvertex3F (0.петдесет души.5.0.5) -люд () - // зелена страна - leapglbegin (gl_polygon) -glcolor3f (0.0.1.0,0.0) -glvertex3F (-0.петдесет души.5.0.5) -glvertex3F (-0.5.0.5.0.5) -glvertex3F (-0.5.0.петдесет души.5) -glvertex3F (-0.петдесет души.петдесет души.5) -glend () - // синя страна - гласGlbegin (gl_polygon) -glcolor3f (0.0,0.0.1.0) -glvertex3F (0.5.0.5.0.5) -glvertex3F (0.5.0.петдесет души.5) -glvertex3F (-0.5.0.петдесет души.5) -glvertex3F (-0.5.0.5.0.5) -glend () - // червена страна - nizhnyglbegin (gl_polygon) -glcolor3f (1.0,0.0,0.0) -glvertex3F (0.петдесет души.петдесет души.5) -glvertex3F (0.петдесет души.5.0.5) -glvertex3F (-0.петдесет души.5.0.5) -glvertex3F (-0.петдесет души.петдесет души.5) -glend () - Glllush () - Glutswapbuffers ()-
Част 3 от 3:
Интерактивна програмаедин. Добавете функцията Specialkeys (). По принцип всичко е почти готово, но кубчето е изтеглено само и не се върти. За да направите това, създайте Функция Специалност (), което ще завърти куба, като натиснете клавишите със стрелки!
- Беше за тази функция, че глобалните променливи се съобщават и Rotate_y са обявени. Когато натиснете "ляво" и "Right" клавишите със стрелки, rotate_y стойността ще се увеличи или ще намалее с пет градуса. По същия начин ще променим стойността на Rotate_X, но вече натискане на стрелките "Up" и надолу.
Void Specialkeys (int Key, int x, int y) {// стрелка надясно - увеличаване на въртенето на 5 градуса (клавиш == glut_key_right) Rotate_y + = 5 - // arel arrow - намаляване на въртенето на 5 градуса, ако (ключ == glut_key_left) Rotate_y - = 5-иначе, ако (клавиш == glut_key_up) Rotate_X + = 5-иначе, ако (клавиш == glut_key_down) Rotate_X - = 5 - // Заявка за актуализиране на screenglutpostredisplay () -} t
2. Добавете glrotate (). Последното нещо, което ще направим, е да добавим низ, който ще ни позволи да завъртим обекта. Връщане към функцията Дисплей () И преди да опишете предната част, добавете:
// Reset TransformationsgloadIdity () - // завъртане при промяна на потребителя Rotate_x и Rotate_yglrotatef стойности (Rotate_x, 1.0, 0.0, 0.0) -glrotatef (RotaTe_y, 0.0, 1.0, 0.0) - // Многоцветна страна - отпред....
3. Добавете следните команди за двукратно скачане на куба по осите X и Y, за да завъртите куб 180 градуса по оста на оста, както и да преместите куба с 0.1 по оста х. Уверете се, че всички съответни команди, включително по-рано зададените Glrotate () команди, са посочени в правилния ред. Ако се страхувате да грешите, вижте окончателната версия на програмата в края на статията.
// Други трансформацииГлонгранслат (0.10.0, 0.0) -glrotatef (180, 0.0, 1.0, 0.0) -glscalef (2.0, 2.0, 0.0)-
4. Компилирайте и стартирайте кода. Да предположим, че използвате GCC като компилатор, затова въведете следните команди на терминала:
На Linux: GCC куб.c -o cube -lglut -lgl./ Mycuben mac: gcc -o foo foo foo.C -FRAMEWERN GLUT-Framework OpenGL./ Mycube прозорци: gcc -wall -fooo foo.C -LGLUT32CU -LGLU32 -LOPENGL32./ Mycube
пет. Проверете окончателния код. Ето окончателния код, създаден от автора на статията, в която коментарите не са преведени.
//// файл: mycube.C // Author: Мат Дайсли // Създаден: 4/25 / 2012 // Проект: Изходен код за създаване на куб в OpenGL // Описание: Създава отворен прозорец и изтегля 3D куб //, че потребителят може да се върти с помощта на Клавиши със стрелки // // Контроли: Остава стрелка- Завъртане ляво // Стрелка надясно - Завъртане надясно // Поддръжка нагоре // Стрелка надолу // Завъртане надолу // -------------- -------------------------------------------- // включва // - -------------------------------------------------- - ------- # включва#Include #Include #Define gl_gelxt_prototypes # ifdef __apple __ # включва # else # включва # endif // --------------------------------- - ------------------------ // функционални прототипи //------------------ --- -------------------------------------- Void Дисплей () - Void Specialkeys () - // ----------------------------------------------- ----- -------- // Глобални променливи // ------------------------------- ------- ---------------------- двойно Rotate_y = 0-Double Rotate_X = 0 - // --------- ------- ------------------------------------------ / / дисплей () функция за обратно извикване / / ------------------------------------------ ------- --------- void дисплей () // чист екран и z-buchergllear (gl_color_buffer_bit //----------------- ------- --------------------------------- // Функция за обаждания // ------- ------------------------------------------- --------- Void Specialkeys (int ключ, int x, int y) {// стрелка надясно - увеличаване на въртенето с 5 градуса (клавиш == glut_key_right) Rotate_y + = 5 - // лява стрелка - Намаляване на въртене С 5 градуса, ако (клавиш == glut_key_ Left) Rotate_y - = 5-иначе, ако (клавиш == glut_key_up) Rotate_X + = 5-иначе, ако (клавиш == glut_key_down) Rotate_X - = 5 - // Искане на дисплея АктуализацияGlutrodisplay () -} // ------ -------------------------------------------------- - - // основна () функция // --------------------------------------- --- ------------------ int main (int argc, char * argv []) glut_depth) - // Създаване на прозорецGlutcreateWindow ("Страхотен куб") - // Разрешаване на дълбочина Z-буфер терен (gl_depth_test) - // Функции за обратно извикванеДъщерятаглавина (дисплей) -GLUTSPECIALFUNC (специални) - // Pass Control до Glut за eventsglutmainloop () - // Връщане в Osreturn 0-