Како да направите коцка во opengl
OpenGL е 3D програмирање алатка која ви овозможува да креирате сложени три-димензионални слики од едноставни форми. Од оваа статија, ќе научите како да се подготви со тоа ќе им помогне на едноставна коцка која може да се ротира во три димензии!
Чекори
Дел 1 од 3:
Почетна инсталацијаЕден. Инсталирајте OpenGL. Започнете S Упатства за инсталација на OpenGL на вашиот компјутер. Ако Opengl и компајлерот со вас веќе имаат, можете да го прескокнете овој чекор и да одите на следниот.
2. Креирај документ. Креирајте нова датотека во вашиот омилен уредник на кодот и зачувајте го како mycube.В
3. Додај #ludes. Еве ги главните # вклучени директиви што ви се потребни. Важно е да се запамети дека директивите за различни оперативни системи се различни, и затоа е неопходно да се избере сè, така што програмата е универзална и може да биде лансирана во било кој систем.
// вклучува # вклучуваат#INClude #INClude #Define gl_gelxt_prototypes # ifdef __apple __ # вклучуваат # друго # вклучуваат #endif
Четири. Додајте функционални прототипови и глобални променливи. Следниот чекор ќе прогласи функционални прототипови.
// функционален прототипсвоиден дисплеј () - Void SpecialKeys () - // Глобал VariablesDeble Rotate_y = 0-Двојно ротирање_X = 0-
Пет. Поставете ја главната () функцијата.
INT MAIN (INT ARGC, CHAR * ARGV []) // Иницијализирајте го презаситеноста и процесот на процесирање на корисникот на корисникот (& ARGC, ARDV) - // Побарајте двојна пуфер прозорец, z-buferization и шема на бои Вистински kologlutinitdisplaymode (glut_double
Дел 2 од 3:
Екран () ФункцијаЕден. Разбирање на задачата на екранот () функцијата. Сите работи на цртање Куба ќе паднат на кревки линии на оваа функција. Идејата воопшто е како што следува: Извлекувате шест одделни лица на коцката и ставете ги на соодветни позиции.
- За секое лице ќе дефинирате четири агол, и opengl ги поврзува со линии и пополнете ја бојата што ја избирате. Подолу ќе покаже како да го направите тоа.
2. Додадете ја GLCER () функцијата. Прво на сите, работејќи со оваа функција, ни треба Јасна боја и z buffer. Без ова, под новиот модел ќе се види стари, а предметите подготвени од програмата ќе бидат неправилно договорени.
Недостаток на екранот () gl_depth_buffer_bit)-
3. Додај Glbegin () и Glend (). OpenGL објекти се комбинации на разни полигони. Тим glbegin () Дозволете ни да нацртаме објект со вас - тоа е како молив, кој го нацртате фигура без да го кине од хартија. Да го раскине молив од листот и почнете да цртате нешто ново, ви треба тим Glend (). Во оваа статија, ние ќе го користиме Gl_Polygon за да го привлече секој раб на коцката, иако е можно да се користат други параметри како Gl_line, GL_QUAD или GL_TRIANGE за да креирате други форми.
// Мултиколирана страна - фронтаголник (GL_PolyGon) - // стихови додадете во следниот чекоргл ()-
Четири. Додадете ја функцијата GLVERTEX3F (). Сега кога ја објаснивте програмата што сакате да започнете со цртање на полигон, ви треба Поставете темиња Објект. Функцијата Glvertex има неколку форми, чија употреба зависи од она што имате намера да го направите со вашиот објект.
// Мултиколирана страна - фронтаголник (gl_polygon) -glvertex3f (-0.Педесет.Педесет.5) - // p1glvertex3f (-0.5.0.Педесет.5) - // p2glvertex3f (0.5.0.Педесет.5) - // p3glvertex3f (0.Педесет.Педесет.5) - // p4lend ()-
Пет. Додајте ја функцијата GLCOLOR3F (). Глолорот дејствува на многу начини слични на Glvertex. Поени што можете да ги поставите типовите на податоци на кратки, цели броеви, двојно или плови. Секоја боја има вредност од 0 до 1. Сите нули се црни, сите единици - соодветно, бело. Слика 3 во GLCOLOR3F () ја означува шемата за бои на RGB без алфа канал. Алфа канал бои е одговорен за неговата транспарентност. За промена на вредноста на алфа канал, користете glcolor4f () со последниот параметар од 0 до 1, односно од нетранспарентност на транспарентност.
// MultiColor Side - фронтаголник (Gl_Polygon) -Glcolor3f (1.0, 0.0, 0.0) -LLVERTEX3F (0.Педесет.Педесет.5) - // p1 redglcolor3f (0.0, 1.0, 0.0) -LLVERTEX3F (0.5.0.Педесет.5) - // p2 greenglcolor3f (0.0, 0.0, 1.0) -LLVERTEX3F (-0.5.0.Педесет.5) - // p3 blunglcolor3f (1.0, 0.0, 1.0) -LLVERTEX3F (-0.Педесет.Педесет.5) - // p4 purpleglend ()-
6. Нацртајте други лица Куба. Подобро, се разбира, ако самиот ја наоѓате локацијата на остатокот од коцката и секоја од темињата, но заради едноставност ги пресметувавме за вас. Кодот е даден Б Екран за конечна функција () подолу.
// бела страна - Reflglegin (GL_POLYGON) -GLCOLOR3F (1.0.1.0, 1.0) -LLVERTEX3F (0.Педесет.Педесет.5) -LLVERTEX3F (0.5.0.Педесет.5) -LLVERTEX3F (-0.5.0.Педесет.5) -LLVERTEX3F (-0.Педесет.Педесет.5) -ленд () - // Виолетова страна - рурален рурална линија (GL_POLYGON) -GLCOLOR3F (1.0,0.0.1.0) -LLVERTEX3F (0.Педесет.Педесет.5) -LLVERTEX3F (0.5.0.Педесет.5) -LLVERTEX3F (0.5.0.5.0.5) -LLVERTEX3F (0.Педесет.5.0.5) -глоден () - // Зелена страна - Lighglbegin (GL_POLYGON) -GLCOLOR3F (0.0.1.0,0.0) -LLVERTEX3F (-0.Педесет.5.0.5) -LLVERTEX3F (-0.5.0.5.0.5) -LLVERTEX3F (-0.5.0.Педесет.5) -LLVERTEX3F (-0.Педесет.Педесет.5) -гленден () - // сина страна - гореглелкагин (gl_polygon) -glcolor3f (0.0,0.0.1.0) -LLVERTEX3F (0.5.0.5.0.5) -LLVERTEX3F (0.5.0.Педесет.5) -LLVERTEX3F (-0.5.0.Педесет.5) -LLVERTEX3F (-0.5.0.5.0.5) -ленден () - // црвена страна - nizhnyglbegin (gl_polygon) -glcolor3f (1.0,0.0,0.0) -LLVERTEX3F (0.Педесет.Педесет.5) -LLVERTEX3F (0.Педесет.5.0.5) -LLVERTEX3F (-0.Педесет.5.0.5) -LLVERTEX3F (-0.Педесет.Педесет.5) -ленден () - Glflush () - GlowswaPbuffers ()-
Дел 3 од 3:
Интерактивна програмаЕден. Додајте ја функцијата SpecialKeys (). Во принцип, сè е речиси подготвено, но коцката е извлечена само и не ротира. За да го направите ова, креирајте Специјалци () Функција, која ќе ја ротира коцката со притискање на копчињата со стрелки!
- Тоа беше за оваа функција дека глобалните променливи ротирачки_x и rotate_y беа објавени. Кога ќе притиснете на копчињата "лево" и "десно", Rotate_y вредност ќе се зголеми или намали за пет степени. Слично на тоа, ние ќе ја смениме вредноста на ротирање_X, но веќе притискање на копчињата "UP" и надолу.
Void SpecialKeys (int Key, int x, int y) {// право стрелка - Зголемена ротација на 5 степени (Клучни == GLUT_KEY_RIGHT) ROTATE_Y + = 5 - // 5 - // 5 - // GLUT_KEY_LEFT) ROTATE_Y - = 5-друго ако (клуч == GLUT_KEY_UP) ROTATE_X + = 5-друг ако (клуч == GLUT_KEY_DOWN) ROTATE_X - = 5 - // Барање за ажурирање на сценарење () -}
2. Додај glototate (). Последното нешто што ќе го направиме е да додадеме низа што ќе ни овозможи да го ротираме објектот. Врати се на функцијата Прикажи () И пред опишувањето на предната страна, додадете:
// Ресетирај Трансформации Блочување () - // ротација при менување на корисничкиот rotate_x и rotate_yglrotatef вредности (rotate_x, 1.0, 0.0, 0.0) -глотротататф (ротирање_y, 0.0, 1.0, 0.0) - // Мултиколирана страна - фронт....
3. Додадете ги следните команди за двокатна коцка Скалирање по должината на оските x и y, за да ротирате коцка 180 степени по должината на оската на оската, како и да ја преместите коцката за 0,1 долж x оската. Бидете сигурни дека сите релевантни команди, вклучувајќи ги и претходно наведените команди за гноте (), се наведени во правилен редослед. Ако се плашите да бидете погрешни, видете ја финалната верзија на програмата на крајот од статијата.
// други трансформацииглтранслат (0.10.0, 0.0) -Готротатеф (180, 0.0, 1.0, 0.0) -глексеф (2.0, 2.0, 0.0)-
Четири. Компилирајте го и стартувајте го кодот. Да претпоставиме дека користите GCC како компајлер, па внесете ги следните команди на терминалот:
На Linux: GCC коцка.C -Ö CUBE -LLUT -LGL./ Mycuben Mac: GCC-Foo Foo.C-FROMAGE DETF-FRENGL OPENGL./ MyCube Windows: GCC -WALL-FOOO FOOO.c -lglut32cu -lglu32 -lopengl32./ Mycube
Пет. Проверете го конечниот код. Тука е конечниот код создаден од авторот на статијата во која не беа преведени коментари.
//// Датотека: mycube.C / / Автор: MATT DAISLE // Креирано: 4/25 / 2012 // Изворен код за коцка во Opengl // Опис: Создава прозорец OpenGL и црта 3D CUBE // дека корисникот може да ротира со користење на Arrow Копчиња // // Контроли: Лево стрелка - Ротација лево // десна стрелка - Ротирај право // нагоре - Ротација нагоре // надолу стрела - Ротирај надолу // ------------------------ ------------------------------------------ ------------------------------------------------- - ------- # вклучуваат#INClude #INClude #Define gl_gelxt_prototypes # ifdef __apple __ # вклучуваат # друго # вклучуваат # Endif // ------------------------------ - ----------------------- // Функција Прототипови // -------------- --- ------------------------------------ Њујорк Прикажи () - VOID Специјалки () - // ---------------------------------------- ----- -------- // Глобал променливи //--------------------------- ---------------------------- Двојно ротирање_Y = 0-Двоен ротирање_X = 0 - //---------- ------------------------------------------------ / Прикажи () Функција за повратен повик / / ---------------------------------------- --------------- ZIN -------------------------------------- // Специјали () Функција за повратен повик // - ----------------------------------------------- --------- Void SpecialKeys (Int Key, INT X, INT Y) {// право стрелка -Зголемување на ротацијата за 5 степени (key == GLUT_KEY_RIGHT) ROTATE_Y + = 5 - // 5 - // 5 - // 5 - // 5 - // 5 - // 5 - // 5 - Намалете го ротацијата за 5 етила ако (клуч == GLUT_KEY_LEFT) Rotate_y - = 5-друг -Еле, ако (клуч == GLUT_KEY_DOW) ROTATE_X - = 5 - // Побарувај дисплеј Updatglutrodisplay () -} // ----------------------- --------------------------------- // Главна () Функција // --------- ------------------------------------------------ int. Главна (ant ARGC, CHAR * ARGV []) GLUT_DEPTH) - // AWESOME CUBE ") - // AWESOME CUBE") - // Овозможи Z-BUBER DEPLASS ОБРАБОТКА (GL_DEPTH_TEST) - // Повратен повик Функции // Pass Control на Leut за actestglutmainLoop () - // Врати се во Оретурн 0-