OpenGLде кантип куб жасоо керек (сүрөттөрү менен)

Мазмуну:

OpenGLде кантип куб жасоо керек (сүрөттөрү менен)
OpenGLде кантип куб жасоо керек (сүрөттөрү менен)

Video: OpenGLде кантип куб жасоо керек (сүрөттөрү менен)

Video: OpenGLде кантип куб жасоо керек (сүрөттөрү менен)
Video: феникс ос установка с флешки, андроид на пк 2024, Март
Anonim

OpenGL-жөнөкөй примитивдерден үч өлчөмдүү татаал көрүнүштөрдү тартуу үчүн колдонулган күчтүү 3D программалоо куралы. Бул макала сизге үч өлчөмдө көрүү үчүн айлана турган жөнөкөй кубду тартууну үйрөтөт!

Бул долбоор үчүн сизге код редактору жана С программалоо боюнча бир аз билим керек болот.

Кадамдар

3төн 1 бөлүк: Баштапкы орнотуу

1994315 1 1
1994315 1 1

Кадам 1. OpenGL орнотуу Баштоо үчүн OpenGLди системаңызга орнотуу үчүн бул кадамдарды аткарыңыз

Эгерде сизде OpenGL, ошондой эле шайкеш C компилятору орнотулган болсо, анда бул кадамды өткөрүп жиберип, кийинкисине өтүңүз.

1994315 2 1
1994315 2 1

Кадам 2. Документти түзүү

Сүйүктүү код редакторуңузда жаңы файл түзүңүз жана аны mycube.c катары сактаңыз

1994315 3 1
1994315 3 1

3 -кадам. #Камтыйт

Бул сиздин программаңызга керектүү болгон негизги нерселер. Иш жүзүндө ар кандай операциялык тутумдар үчүн керектүү болгон нерселер бар экенин түшүнүү маанилүү. Программаңыз ар тараптуу жана каалаган колдонуучу үчүн иштей алышы үчүн булардын баарын камтууну унутпаңыз.

    // камтыйт #кошуу #кошуу #кошуу #аныктоо GL_GLEXT_PROTOTYPES #ifdef _APPLE_ #кошуу #башка #кошуу #endif

1994315 4 1
1994315 4 1

Кадам 4. Функциянын прототиптерин жана глобалдык өзгөрмөлөрдү кошуңуз

Сиздин кийинки кадамыңыз - кээ бир функциянын прототиптерин жарыялоо.

    // Function Prototypes void display (); Void specialKeys (); // Global Variables double rotate_y = 0; double rotate_x = 0;

1994315 5 1
1994315 5 1

Кадам 5. main () функциясын орнотуңуз

    int main (int argc, char* argv ) {// GLUTты иштетүү жана glutInit колдонуучунун параметрлерин иштетүү (& argc, argv); // Z-buffer glutInitDisplayMode (GLUT_DOUBLE | GLUT_RGB | GLUT_DEPTH) менен кош буферленген чыныгы түс терезесин сурануу;

  • Бул билдирүү сиздин чөйрөнү түзөт. OpenGL программаларын жазууда эстен чыгарбоо керек болгон нерсе, сиз баарын сурашыңыз керек. Бул сиздин программаңыздын кандай иштээрин жана сиз каалаган функционалды алуу үчүн эмнени камтышы керек экенин жакшыраак түшүнүүнү талап кылат. Бул сапта сиз дисплейди эки буферлүү, RGB түсү жана Z-буфер менен орнотосуз.
  • Кош буферлөө сүрөттөр экранга кантип тартылганына байланыштуу пайда болгон көйгөйдү жоюу үчүн графикалык программаларда колдонулган ыкма. Сценаны кайра тарткан сайын, дисплей биринчи өчүрүлүшү керек, андан кийин жаңы маалымат тартылат. Эки жолу буферлебестен, сиз жылтылдаган эффектти байкайсыз, анткени экран өчүрүлөт жана кайра кайра тартылат.
  • Бул көйгөй тартуу үчүн экинчи буферди кошуу менен чечилет. Бул ыкма менен биринчи буферге сүрөт тартылат жана ал буфер сизге көрсөтүлөт. Кийинки кадр экинчи буферге тартылат жана ал бүткөндө, эки буфер орундарды алмаштырат. Сиз дароо экинчи буферди көрөсүз, бирок бизден жашыруун, биринчи буфер өчүрүлүп, үчүнчү алкак менен кайра тартылып жатат, ал бүткөндө алмаштырылат.
  • Сиз ошондой эле иштетүүнү каалайсыз RGB түсү системасы сиздин терезеде.
  • Z-буферлөө Сиз каалаган 3D эффекттерин кантип аласыз. OpenGL x, y жана z огу менен үч өлчөмдүү координаттар системасын колдонот. Объекттин сизге жакыныраак болушун камсыз кылуу үчүн анын z огунда анын орду жогорулайт, бирок анын алыстай көрүнүшү үчүн z огунда анын орду азаят.
1994315 6 1
1994315 6 1

Кадам 6. Терезени түзүү

Кийинки кадам - бул терезени түзүү анын ичинде сиз кубаны тартасыз. Бул окуу куралында терезе "Укмуш куб" деп аталат.

    // Терезе glutCreateWindow түзүү ("Укмуш куб");

1994315 7 1
1994315 7 1

Кадам 7. Тереңдикти текшерүүнү иштетүү

OpenGL - бул катаал тил, анткени ал эч кандай атайын функция иштетилген деп ойлобойт. Программаңыз 3-өлчөмдө туура каралышы үчүн, сиз мурда караган Z-буферин колдонушуңуз керек тереңдикти текшерүүнү иштетүү. OpenGLди изилдөөнү улантып жатып, сиз жарык берүү, текстуралар, бырышуу жана башка көптөгөн нерселерди камтыган көптөгөн функцияларды ачасыз.

    // Z-буфердик тереңдикти текшерүүнү иштетүү glEnable (GL_DEPTH_TEST);

1994315 8 1
1994315 8 1

Кадам 8. Кайра чалуу функцияларын кошуңуз

Бул жерде сиз мурунку прототиптериңизди кайра чалуу функциялары. Ар бир жолу негизги цикл аркылуу бул функциялар чакырылат. Дисплей функциясы мурунку чалуудан бери өзгөрмөлөрдүн өзгөрүшүнө негизделген көрүнүштү кайра тартат. SpecialKeys функциясы бизге программа менен иштешүүгө мүмкүнчүлүк берет.

    // Callback функциялары glutDisplayFunc (дисплей); glutSpecialFunc (specialKeys);

1994315 9 1
1994315 9 1

Кадам 9. MainLoopту баштаңыз

Бул анимацияга жана колдонуучунун өз ара аракеттенүүсүнө уруксат берүү үчүн программаны жапмайынча, негизги функцияны эстейт.

    // glutMainLoop () окуялары үчүн башкарууну GLUTка өткөрүңүз; // ОСко кайтуу 0; }

3төн 2 бөлүк: дисплей () Функциясы

1994315 10 1
1994315 10 1

Кадам 1. Бул функциянын максатын түшүнүңүз

Кубуңузду тартуу боюнча бардык иштер ушул функцияда аткарылат. Кубуңуздун артында турган жалпы идея - бул бардык алты жагын жекече тартуу жана аларды тийиштүү жерге коюу.

Концептуалдуу түрдө, ар бир тарап төрт бурчту аныктап, OpenGLге линияларды туташтырып, аны сиз белгилеген түс менен толтуруу аркылуу тартылат. Төмөндө бул үчүн кандай кадамдар бар

1994315 11 1
1994315 11 1

Кадам 2. glClear () кошуу

Бул функцияны аткарышыңыз керек болгон биринчи кадам - бул түсүн жана Z буферин тазалаңыз. Бул кадамдар болбосо, эски чиймелер дагы эле жаңы чиймелердин астында көрүнүшү мүмкүн жана тартылган нерселер экрандын туура жеринде болбойт.

    void display () {// Таза экран жана Z-буфер glClear (GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);

1994315 12 1
1994315 12 1

Кадам 3. glBegin () жана glEnd () кошуңуз

OpenGL объекттерди ар кандай полигондордун айкалышы катары аныктайт. Колдонуу glBegin () буйрук, сиз натыйжалуу фигура тарткан карандашты түшүрөсүз. Карандашты көтөрүп, жаңы форманы баштоо үчүн, аны колдонуу керек glEnd () буйрук. Бул үйрөткүчтө сиз GL_POLYGON кубдун ар бир тарабын тартуу үчүн колдонуласыз, бирок башка формаларды түзүү үчүн GL_LINE, GL_QUAD же GL_TRIANGLE сыяктуу башка параметрлерди колдонсоңуз болот.

  • Бул жерде сиз кубуңуздун маңдайынан баштайсыз. Кийинчерээк бардык 6 тарапка түс кошосуз.
  • // Көп түстүү жагы - FRONT glBegin (GL_POLYGON); // Vertices кийинки кадамда кошулат glEnd ();

1994315 13 1
1994315 13 1

Кадам 4. glVertex3f () кошуу

Сиз полигонуңузду баштайм деп айткандан кийин, керек чокуларды аныктоо объектинин. glVertex сиздин объект менен эмне кылгыңыз келгенине жараша бир нече формаларга ээ.

  • Биринчиси, сиз канча өлчөмдө иштеп жатканыңыз. GlVertex3fтеги 3 жогору сиз 3 өлчөмдө чийип жатканыңызды айтат. Ошондой эле 2 же 4 өлчөмдө иштөөгө болот. GlVertex3f ичиндеги f сиз өзгөрмөлүү чекит сандары менен иштеп жатканыңызды айтат. Сиз ошондой эле шорты, бүтүн сандарды же дублдерди колдоно аласыз.
  • Бул пункттар а -да аныкталганын байкаңыз сааттын жебесине каршы манера. Бул азырынча анча маанилүү эмес, бирок сиз жарык, текстуралар жана бүктөлүп кароо менен иштей баштаганда, бул абдан маанилүү болуп калат, андыктан упайларыңызды азыр саат жебесине каршы аныктоону адатка айлантыңыз.
  • GlBegin () жана glEnd () сызыктарынын ортосундагы чокуларды кошуу.
  • // Көп түстүү жагы - FRONT glBegin (GL_POLYGON); glVertex3f (-0.5, -0.5, -0.5); // P1 glVertex3f (-0.5, 0.5, -0.5); // P2 glVertex3f (0.5, 0.5, -0.5); // P3 glVertex3f (0.5, -0.5, -0.5); // P4 glEnd ();

1994315 14 1
1994315 14 1

Кадам 5. glColor3f () кошуу

glColor glVertexке окшош иштейт. Сиз чекиттерди кыска, бүтүн сандар, дублдар же калкыма катары аныктай аласыз. Ар бир түс 0дөн 1ге чейин мааниге ээ. Бардык 0'лер чекитти кара кылат жана 1лердин баары чекитти ак кылат. GlColor3f () ичиндеги 3 альфа каналы жок RGB түс тутумун билдирет. Түстүн альфасы анын тунуктугун аныктайт. Альфа деңгээлин өзгөртүү үчүн, glColor4f () колдонуңуз, акыркы параметр тунук үчүн тунук эмес үчүн 0дөн 1ге чейин.

  • Сиз glColor3f () деп атаганда, ошол жерден тартылган ар бир чоку ошол түстө болот. Ошондуктан, эгер сиз бардык төрт чокунун кызыл болушун кааласаңыз, glVertex3f () буйруктарына чейин түстү каалаган убакта бир жолу коюңуз жана бардык чокулар кызыл болот.
  • Төмөндө аныкталган алдыңкы тарабы ар бир чокуга жаңы түстү кантип аныктоону көрсөтөт. Муну кылганда, OpenGL түстөрүнүн кызыктуу касиетин көрө аласыз. Көп бурчтуктун ар бир чокусу өзүнүн түсүнө ээ болгондуктан, OpenGL автоматтык түрдө түстөрдү аралаштырат! Кийинки кадам бир эле түстөгү төрт чокуну кантип дайындоону көрсөтөт.
  • // Көп түстүү жагы - FRONT glBegin (GL_POLYGON); glColor3f (1.0, 0.0, 0.0); glVertex3f (0.5, -0.5, -0.5); // P1 кызыл glColor3f (0.0, 1.0, 0.0); glVertex3f (0.5, 0.5, -0.5); // P2 жашыл glColor3f (0.0, 0.0, 1.0); glVertex3f (-0.5, 0.5, -0.5); // P3 көк glColor3f (1.0, 0.0, 1.0); glVertex3f (-0.5, -0.5, -0.5); // P4 кызгылт көк glEnd ();

1994315 15 1
1994315 15 1

Кадам 6. Башка тараптарды иштетүү

Кубанын калган беш тарабы үчүн ар бир чокунун орду кандай болорун билип алыңыз, бирок жөнөкөйлүк үчүн булар сиз үчүн эсептелген жана акыркы дисплей () функциясы төмөндө.

    // Ак жагы - BACK glBegin (GL_POLYGON); glColor3f (1.0, 1.0, 1.0); glVertex3f (0.5, -0.5, 0.5); glVertex3f (0.5, 0.5, 0.5); glVertex3f (-0.5, 0.5, 0.5); glVertex3f (-0.5, -0.5, 0.5); glEnd (); // Күлгүн тарабы - ОҢ glBegin (GL_POLYGON); glColor3f (1.0, 0.0, 1.0); glVertex3f (0.5, -0.5, -0.5); glVertex3f (0.5, 0.5, -0.5); glVertex3f (0.5, 0.5, 0.5); glVertex3f (0.5, -0.5, 0.5); glEnd (); // Жашыл тарап - LEFT glBegin (GL_POLYGON); glColor3f (0.0, 1.0, 0.0); glVertex3f (-0.5, -0.5, 0.5); glVertex3f (-0.5, 0.5, 0.5); glVertex3f (-0.5, 0.5, -0.5); glVertex3f (-0.5, -0.5, -0.5); glEnd (); // Көк жагы - TOP glBegin (GL_POLYGON); glColor3f (0.0, 0.0, 1.0); glVertex3f (0.5, 0.5, 0.5); glVertex3f (0.5, 0.5, -0.5); glVertex3f (-0.5, 0.5, -0.5); glVertex3f (-0.5, 0.5, 0.5); glEnd (); // Кызыл жагы - BOTTOM glBegin (GL_POLYGON); glColor3f (1.0, 0.0, 0.0); glVertex3f (0.5, -0.5, -0.5); glVertex3f (0.5, -0.5, 0.5); glVertex3f (-0.5, -0.5, 0.5); glVertex3f (-0.5, -0.5, -0.5); glEnd (); glFlush (); glutSwapBuffers (); }

  • Биз ошондой эле бул функция үчүн коддун акыркы эки сабын кошкубуз келет. Булар glFlush ();

    жана glutSwapBuffers ();

    бул бизге мурда билген эки эсе буфердик эффект берет.

3 -жылдын 3 -бөлүгү: Колдонуучунун интерактивдүүлүгү

1994315 16 1
1994315 16 1

Кадам 1. specialKeys () кошуу

Сиз дээрлик бүттүңүз, бирок учурда сиз кубду тарта аласыз, бирок аны айлантууга эч кандай мүмкүнчүлүгүңүз жок. Бул үчүн, сиз жасайсыз specialKeys түзүү () жебе баскычтарын басып, кубду айлантууга мүмкүндүк берүүчү функция!

  • Бул функция глобалдык өзгөрмөлөрдү rotate_x жана rotate_y деп жарыялаганыңыздын себеби. Оң жана сол жебе баскычтарын басканыңызда, rotate_y 5 градуска көбөйөт же азаят. Ошо сыяктуу эле, сиз өйдө жана ылдый жебе баскычтарын басканда, rotate_x ошого жараша өзгөрөт.
  • void specialKeys (int key, int x, int y) {// Оң жебе - айланууну 5 градуска жогорулатуу, эгерде (key == GLUT_KEY_RIGHT) rotate_y += 5; // Сол жебе - айланууну 5 градуска азайтыңыз, эгерде (key == GLUT_KEY_LEFT) rotate_y - = 5; else if (key == GLUT_KEY_UP) rotate_x += 5; else if (key == GLUT_KEY_DOWN) rotate_x -= 5; // Дисплейдин жаңыртуусун талап кылуу glutPostRedisplay (); }

1994315 17 1
1994315 17 1

Кадам 2. glRotate () кошуу

Сиздин акыркы билдирүүңүз объектиңизди айландыра турган билдирүүнү кошуу. Display () функциясына кайтып келиңиз жана ФРОНТко чейин бул саптарды кошуңуз:

    // Которууларды кайра коюу glLoadIdentity (); // Колдонуучу rotate_x жана rotate_y glRotatef өзгөрткөндө буруңуз (rotate_x, 1.0, 0.0, 0.0); glRotatef (rotate_y, 0.0, 1.0, 0.0); // Көп түстүү жагы - ФРОНТ ….

  • Алгач синтаксисине көңүл буруңуз glRotatef () glColor3f () жана glVertex3f () окшош, бирок дайыма 4 параметрди талап кылат. Биринчи параметр - бул колдонула турган айлануу даражасы. Кийинки үч параметр кайсы огунун айлануусун аныктайт, биринчиси - x огу, экинчиси - y огу, үчүнчүсү - z огу. Азыр сиз x жана y огунун айланасында гана айланууңуз керек.
  • Программаңызга жазган бардык трансформациялар ушуга окшош саптарга муктаж. Концептуалдык түрдө, сиз муну объектиңизди x огу боюнча rotate_x менен аныкталган суммага айландыруу, анан y огунун айланасында rotate_y менен айлануу деп ойлосоңуз болот. Бирок, OpenGL бул сөздөрдүн бардыгын бир матрицалык трансформацияга бириктирет. Дисплей функциясын чакырган сайын, сиз трансформация матрицасын түзөсүз жана glLoadIdentity () ар бир өтүүдө жаңы матрицадан баштай турганыңызга ишендирет.
  • Сиз колдоно турган башка трансформация функциялары - glTranslatef () жана glScalef (). Бул функциялар glRotatef () менен окшош, бирок алар объектти которуу же масштабдоо үчүн 3 параметрди, x, y жана z өлчөмдөрүн гана алышат.
  • Үч трансформацияны бир объектке колдонууда туура эффект алуу үчүн, аларды туура тартипте колдонуу керек. Аларды дайыма ирети менен жазыңыз glTranslate, glRotate, андан кийин glScale. OpenGL негизинен өзгөртүүлөрдү төмөндөн жогору карай колдонот. Муну түшүнүү үчүн OpenGL аларды жогорудан ылдый карай колдонгондо жана OpenGL аларды ылдыйдан өйдө колдонгондо, жөнөкөй 1x1x1 кубу трансформациялар менен кандай болорун элестетип көрүңүз.
1994315 18 1
1994315 18 1

3-кадам. Кубту х огу боюнча 2ге, у огу боюнча 2ге, кубикти огу боюнча 180 градуска буруп, х огу боюнча 0,1ге которуу үчүн төмөнкү буйруктарды кошуңуз

Буларды жана мурунку glRotate () командаларын жогоруда сүрөттөлгөндөй туура тартипте уюштурганыңызды текшериңиз. (Эгер ишенбесеңиз, бул окуу куралынын аягындагы акыркы коддо жасалат.)

    // Башка өзгөртүүлөр glTranslatef (0.1, 0.0, 0.0); glRotatef (180, 0.0, 1.0, 0.0); glScalef (2.0, 2.0, 0.0);

1994315 19 1
1994315 19 1

Кадам 4. Түзүү жана кодду иштетүү

Сиз gccти компилятор катары колдонуп жатасыз деп ойлосоңуз, программаңызды компиляциялоо жана сыноо үчүн бул буйруктарды терминалыңыздан иштетиңиз.

    Linux боюнча: gcc cube.c -o cube -lglut -lGL./ mycube Macта: gcc -o foo foo.c -ramework GLUT -framework OpenGL./ mycube Windowsто: gcc -Wall -ofoo foo.c -lglut32cu - lglu32 -lopengl32./ mycube

1994315 20 1
1994315 20 1

Кадам 5. Толук кодуңузду текшериңиз

Ал мындай болушу керек:

    // // Файл: mycube.c // Автор: Мэтт Дейсли // Түзүлгөн: 25.04.2012 // Долбоор: OpenGLде Куб жасоо үчүн баштапкы код // Сүрөттөмө: OpenGL терезесин түзүп, 3D кубун тартат/ / Колдонуучу жебе баскычтарын колдонуп айлана алат // // Башкаруулар: Сол жебе -Солго буруу // Оңго жебе -Оңго буруу // Өйдөгө өйдө кароо -------------------------------------------------- -// камтыйт // ------------------------------------------- --------------- #кошуу #кошуу #кошуу #аныктоо GL_GLEXT_PROTOTYPES #ifdef _APPLE_ #кошуу #дагы #кошуу #endif // ------------- --------------------------------------------- // Функциянын прототиптери / / ------------------------------------------------- --------- void display (); Void specialKeys (); // ------------------------------------------------ ---------- // Глобалдык өзгөрмөлөр // ---------------------------------- ------------------------ double rotate_y = 0; double rotate_x = 0; // ------------------------------------------------ ---------- // display () Callback функциясы // ------------------------------- --------------------------- void display () {// Таза экран жана Z-буфер glClear (GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); // Которууларды кайра коюу glLoadIdentity (); // Башка трансформациялар // glTranslatef (0.1, 0.0, 0.0); // Кирбейт // glRotatef (180, 0.0, 1.0, 0.0); // Киргизилбейт // Колдонуучу rotate_x жана rotate_y glRotatef өзгөрткөндө айландыруу (rotate_x, 1.0, 0.0, 0.0); glRotatef (rotate_y, 0.0, 1.0, 0.0); // Башка өзгөртүүлөр // glScalef (2.0, 2.0, 0.0); // Кирбейт // Көп түстүү жагы - FRONT glBegin (GL_POLYGON); glColor3f (1.0, 0.0, 0.0); glVertex3f (0.5, -0.5, -0.5); // P1 кызыл glColor3f (0.0, 1.0, 0.0); glVertex3f (0.5, 0.5, -0.5); // P2 жашыл glColor3f (0.0, 0.0, 1.0); glVertex3f (-0.5, 0.5, -0.5); // P3 көк glColor3f (1.0, 0.0, 1.0); glVertex3f (-0.5, -0.5, -0.5); // P4 кызгылт көк glEnd (); // Ак жагы - BACK glBegin (GL_POLYGON); glColor3f (1.0, 1.0, 1.0); glVertex3f (0.5, -0.5, 0.5); glVertex3f (0.5, 0.5, 0.5); glVertex3f (-0.5, 0.5, 0.5); glVertex3f (-0.5, -0.5, 0.5); glEnd (); // Күлгүн тарабы - ОҢ glBegin (GL_POLYGON); glColor3f (1.0, 0.0, 1.0); glVertex3f (0.5, -0.5, -0.5); glVertex3f (0.5, 0.5, -0.5); glVertex3f (0.5, 0.5, 0.5); glVertex3f (0.5, -0.5, 0.5); glEnd (); // Жашыл тарап - LEFT glBegin (GL_POLYGON); glColor3f (0.0, 1.0, 0.0); glVertex3f (-0.5, -0.5, 0.5); glVertex3f (-0.5, 0.5, 0.5); glVertex3f (-0.5, 0.5, -0.5); glVertex3f (-0.5, -0.5, -0.5); glEnd (); // Көк жагы - TOP glBegin (GL_POLYGON); glColor3f (0.0, 0.0, 1.0); glVertex3f (0.5, 0.5, 0.5); glVertex3f (0.5, 0.5, -0.5); glVertex3f (-0.5, 0.5, -0.5); glVertex3f (-0.5, 0.5, 0.5); glEnd (); // Кызыл жагы - BOTTOM glBegin (GL_POLYGON); glColor3f (1.0, 0.0, 0.0); glVertex3f (0.5, -0.5, -0.5); glVertex3f (0.5, -0.5, 0.5); glVertex3f (-0.5, -0.5, 0.5); glVertex3f (-0.5, -0.5, -0.5); glEnd (); glFlush (); glutSwapBuffers (); } // ----------------------------------------------- ----------- // specialKeys () кайра чалуу функциясы // ------------------------------ ---------------------------- void specialKeys (int key, int x, int y) {// Оң жебе-айланууну 5ке көбөйтүү даража эгерде (key == GLUT_KEY_RIGHT) rotate_y += 5; // Сол жебе - айланууну 5 градуска азайтыңыз, эгерде (key == GLUT_KEY_LEFT) rotate_y - = 5; else if (key == GLUT_KEY_UP) rotate_x += 5; else if (key == GLUT_KEY_DOWN) rotate_x -= 5; // Дисплейдин жаңыртуусун талап кылуу glutPostRedisplay (); } // ----------------------------------------------- ----------- // main () функциясы // ------------------------------- --------------------------- int main (int argc, char* argv ) {// GLUTты инициализациялоо жана glutInit колдонуучу параметрлерин иштетүү (& argc, argv); // Z-buffer glutInitDisplayMode менен кош буферленген чыныгы түстүү терезени сурануу (GLUT_DOUBLE | GLUT_RGB | GLUT_DEPTH); // Терезе glutCreateWindow түзүү ("Укмуш куб"); // Z-буфердик тереңдикти текшерүүнү иштетүү glEnable (GL_DEPTH_TEST); // Callback функциялары glutDisplayFunc (дисплей); glutSpecialFunc (specialKeys); // glutMainLoop () окуялары үчүн көзөмөлдү GLUTка өткөрүңүз; // ОСко кайтуу 0; }

Сунушталууда: