Како да направите коцка во 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 има неколку форми, чија употреба зависи од она што имате намера да го направите со вашиот објект.
  • Прво - колку мерења ќе работите? Слика 3 во Glvertex3f укажува на три димензии. Сепак, можете да работите во 2, и во 4 мерења. Писмото f, пак, укажува на тоа дека работиме со лебдечки точки. Сепак, тука можете да користите цели броеви, двојни или кратки видови.
  • Имајте на ум дека сите точки се поставени спротивно од стрелките на часовникот Стрелки. Иако не е многу важно, но кога ќе почнете да работите на осветлување, текстурирање, третман на не-тарифни лица, навиката за пропишување на сè спротивно од стрелките на часовникот ќе биде многу корисна за вас.
  • Додадете темиња помеѓу Glbegin () и Glend () линии.


  • // Мултиколирана страна - фронтаголник (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, односно од нетранспарентност на транспарентност.
  • Повикувајќи glcolor3f (), ние го правиме секој вертекс од наведената точка во наведената боја. Со други зборови, ако сите четири темиња треба да бидат црвени, тогаш само еднократно време ја постави вредноста на бојата пред да ги повика командите на Glvertex3f (), и сите тие ќе бидат црвени.
  • На примерот на предниот дел подолу, можете да видите како е поставена новата боја на секоја вертекс. Кога го правите тоа, можете да се запознаете со интересна карактеристика на цвеќињата OpenGL. Бидејќи секој нотка на полигонот има своја боја, Opengl автоматски ги меша боите! Кодот поставен на покажува како да креирате четири темиња со иста боја.
  • // 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 ()-
  • Обрнете внимание на последните две линии. Ова се функции glflush ()- и gletswaPbuffers ()-, Давајќи ефект на двојно пуфер, што беше кажано погоре.
  • Дел 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) - // Мултиколирана страна - фронт....
  • Забележете ја таа синтакса GLOTATEF (), што е слично на синтаксата на Glcolor3f () и Glvertex3F (), но секогаш бара индикација за четири параметри. Прво - аголот на ротација во степени. Следните три оски за кои ротација оди, во редоследот X, Y, Z. Досега, треба да ја ротираме коцката на две оски, X и u.
  • За сите трансформации кои ја специфицираат програмата, потребни се слични линии. Всушност, ние ја претставуваме ротацијата на објектот по х оската како промена во Rotate_x вредност, и ротацијата на оската на оската - како промена во вредноста на ротирање_Y. Сепак, OpenGL ќе го обедини сè во една трансформација матрица. Без разлика дали повикувате на функцијата за прикажување, ќе креирате матрица за трансформација и GLOAKENTITY () ќе ви овозможи да започнете секогаш со нова матрица.
  • Други функции за трансформација кои можете да ги користите е gltranslatef () и Glcalef (). Тие се слични на Glrotatef (), освен што само три параметри бараат: вредностите x, y и z за промена и скалирање на објектот.
  • Така што сè е правилно прикажано кога сите три трансформации се применуваат на еден објект, треба да поставите трансформации во соодветниот редослед, имено Gltranslate, glototate, glscale - и никогаш не е поинаку. Opengl трансформира објект читање на програмата од дното нагоре. За подобро разбирање на ова, замислете како коцката од 1x1x1 ќе ги разгледа сите трансформации ако OpenGL ги примени во наредба како што е наведено (од врвот до дното), а потоа размислете за тоа како OpenGL ја третира коцката, читајќи ги инструкциите од дното нагоре.
  • 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-
  • Слични публикации