Cum se face un cub în OpenGL

OpenGL este un instrument de programare tridimensional versatil folosit pentru a desena scenele complexe în 3D prin rutine simple. Acest articol vă va învăța cum să desenați un cub pe care îl puteți întoarce pentru al vedea în trei dimensiuni!

Pentru acest proiect veți avea nevoie de un editor de cod și un pic de cunoștințe de programare cu limba C.

pași

Partea 1
Configurație inițială și principală ()

1) Instalați OpenGL

  • Pentru început, urmați-le pași pentru a instala OpenGL în sistemul dvs. Dacă aveți deja în plus față de compilatorul C, puteți sări peste acest pas și treceți la următorul.

2) Creați documentul

  • Creați un fișier nou în editorul dvs. de cod preferat și salvați-l ca: micubo.c

3) Bibliotecile (#include)

  • Acestea sunt bibliotecile de bază de care veți avea nevoie pentru programul dvs. Va fi important să rețineți că, în funcție de sistemul de operare, ar putea exista și alte biblioteci necesare. Asigurați-vă că adăugați toate acestea astfel încât programul dvs. să fie versatil și poate fi executat de orice utilizator.

// Include # include #include #include #define GL_GLEXT_PROTOTYPES # ifdef __APPLE __ # include # altceva # include #endif

4) prototipuri funcționale și variabile globale

  • Următorul pas va fi declararea unor prototipuri de funcții.

    / / Prototypes of functionvoid display () - void specialKeys () - // variabile globaledouble rotate_y = 0-double rotate_x = 0-
  • Fiecare dintre aceste funcții și variabilele globale vor fi explicate în detaliu pe măsură ce le implementați ulterior în conformitate cu acest tutorial. Pentru moment, lucrul important va fi să-i declarați.

5) Configurați funcția principal ()

  • int main (int argc, char * argv []) // Initializeaza GLUT si parametrii de utilizator procesoglutInit (&argc, argv) - // Solicitați fereastra cu culoare reală și buffer tampon dublu cu zgomotul Z glutInitDisplayMode (GLUT_DOUBLE 

Partea 2
Funcția "display ()"

  • Toate lucrările pentru a desena cubul se vor face cu această funcție. Ideea principală va fi să desenezi cele 6 laturi și să le aranjezi în poziția corectă.

  • În mod conceptual, va trebui să definiți cele patru colțuri pe o parte și să lăsați OpenGL să conecteze punctele cu linii și să le culoare așa cum le-ați definit. Aici vom prezenta pașii care trebuie făcuți:

1) funcția glClear ()

  • Primul pas pe care va trebui să-l luați în această funcție va fi curățați culoarea și tamponul Z, în caz contrar, desenele vechi vor fi totuși vizibile sub noile desene și obiectele desenate nu vor fi în poziția corectă pe ecran.

void display () // Ștergeți ecranul și Z-bufferglClear (GL_COLOR_BUFFER_BIT
  • De asemenea, trebuie să includeți ultimele două linii de cod pentru această funcție: glFlush () - și glutSwapBuffers () -, care vă va oferi efectul dublu-tampon.


  • Partea 3
    Interactivitatea cu utilizatorul

    1) funcția specialKeys ()

    • Totul este aproape gata: aveți deja cubul, dar nu există nici o modalitate de ao roti. Pentru a face acest lucru, creați o funcție tastele speciale ()pentru a vă permite să apăsați tastele săgeată cu săgețile și rotiți cubul!

    • Pentru această funcție a trebuit să declarați variabilele globale "rotate_x" și "rotate_y". Când apăsați tastele săgeți spre dreapta și spre stânga, variabila "rotate_y" va crește sau scădea cu 5 grade. În mod similar, când apăsați tastele săgeți în sus și în jos, variabila "rotate_x" va crește sau scădea cu 5 grade.

    specialKeys void (tasta int x, int y) {// Săgeata din dreapta mărește rotatiei 5 gradosif (tasta == GLUT_KEY_RIGHT) rotate_y + = 5 - // Sageata stanga: scade rotatie in 5 gradoselse if ( cheie == GLUT_KEY_LEFT) rotate_y - = 5-else if (cheie == GLUT_KEY_UP) rotate_x + = 5-else if (element == GLUT_KEY_DOWN) rotate_x - = 5 - // cerere de modificare pantallaglutPostRedisplay () -}

    2) glRotate ()

    • Ultima instrucțiune va fi adăugarea liniilor pentru rotirea obiectului. Reveniți la funcție afișați () și înainte de FRONTAT, adăugați liniile de mai jos:

      // Resetarea transformacionesglLoadIdentity () - // Rotire când utilizatorul schimbă valorile "rotate_x" și "rotate_y" .glRotatef (rotate_x, 1,0, 0,0, 0,0) -glRotatef (rotate_y, 0.0, 1.0, 0.0) - // FAȚĂ LUNGĂ: fețe multicolore ....
    • Observați că sintaxa din glRotatef () este similar cu cel al glColor3f () și glVertex3f (), dar necesită întotdeauna 4 parametri. Primul parametru este gradul de rotație care va fi aplicat iar ceilalți trei parametri sunt axele de rotație X, Y și Z. Pentru moment, va fi necesar să se rotească doar pe X și Y.

    • Toate transformările pe care le scrieți în program au nevoie de o linie similară cu aceasta. În mod conceptual, se consideră a fi rotirea obiectului pe axa X cu suma definită de "rotate_x" și apoi rotirea pe axa Y cu "rotate_y". Cu toate acestea, OpenGL combină toate aceste declarații într-o transformare matriceală. De fiecare dată când apelați funcția "afișare", veți construi o matrice de transformare și glLoadIdentity () vă veți asigura că începeți cu o nouă matrice în fiecare pas.

    • Celelalte funcții de transformare pe care le-ați putea aplica sunt glTranslatef () și glScalef (). Aceste funcții sunt similare cu glRotatef (), cu excepția faptului că cer doar trei parametri, cantitățile de X, Y, Z pentru a traduce sau desena obiectul la scară.

    • Pentru a obține efectul dorit când aplicați cele trei transformări unui obiect, va fi necesar să le aplicați în ordinea corectă. Scrie-le întotdeauna în ordine: glTranslate, glotate, apoi glScale. În esență, ceea ce va face OpenGL este să aplicați transformările de jos în sus. Pentru ao asimila, imaginați-vă apariția unui simplu cub 1x1x1 cu transformările dacă OpenGL le-a aplicat de sus în jos și dacă a făcut-o de jos în sus.

    • Adăugați următoarele comenzi pentru a desena scara cub de 2 în X și axa Y rotește butucul 180 de grade pe axa Y, apoi se deplasează butucul 0.1 pe axa X Ca și cu comenzile glRotate () , asigurați-vă că pentru a le pune în ordinea corectă descrisă mai sus (dacă nu sunteți sigur, veți vedea făcut-o în codul finală situat la sfârșitul acestui program de instruire).

      // Alte transformărigTranslatef (0,1, 0,0,0,0) -glRotatef (180, 0,0, 1,0, 0,0) -glScalef (2,0, 2,0, 0,0)

    compilare

    • Ultimul pas pentru a termina primul proiect cu OpenGL va fi compilați și executați codul. Presupunând că aveți la dispoziție un compilator gcc, executați următoarele comenzi într-un terminal pentru a compila și a testa programul.

      Linux: GCC cube.c cub -lglut o- -lGL./ micuboEn Mac: gcc foo foo.c -Framework o- GLUT -Framework OpenGL./ micuboEn Ferestre: GCC -Wall -ofoo foo.c -lglut32cu -lglu32 - lopengl32./ micubo

    Partea 4
    Codul final

    • Gata, ai primul program OpenGL! Mai jos este codul sursă pentru tine ca referință:

    //// fișier: // micubo.c Autor: Matei Diaz // Creat: 4/25/2012 // proiect: codul sursă pentru a face un cub în OpenGL // Descriere: a crea o fereastra OpenGL și desena un cub 3D / / că utilizatorul poate roti tastele săgeată // // Controale: săgeată stânga: rotire stânga // săgeată dreapta: // roti dreapta sus săgeată: roti în sus // în jos săgeată: roti jos // ----------------------------------------------- ----------- // Biblioteci // -------------------------------------------------- #include #include #include ------------------------ #define __APPLE GL_GLEXT_PROTOTYPES # ifdef __ #include #include endif altceva // ---- -------------------------------------------------- ---- // Prototipuri de funcții // --------------------------------------- ------------------- void display () - void specialKeys () - // ------------------- --------------------------------------- // Variabile globale // ----- -------------------------------------------------- --- dublu rotate_y = 0-dublu se rotește te_x = 0 - // -------------------------------------------- -------------- // Afișează funcția "Callback" () "// ------------------------ ---------------------------------- afișare void () // ecran clar și Z-bufferglClear (GL_COLOR_BUFFER_BIT // -------------------------------------------------- -------- // Funcția Callback "specialKeys ()" // ------------------------------ ---------------------------- void special Keys (tasta int, int x, int y) {// Sare dreapta: creste rotatia la 5 grade (cheie == GLUT_KEY_RIGHT) rotate_y = 5 + - săgeata stânga 5 gradoselse (tasta == GLUT_KEY_LEFT) // descreștere rotație dacă rotate_y - = 5 else if (cheie == GLUT_KEY_UP) rotate_x + = 5 else if (key = = GLUT_KEY_DOWN) rotate_x - = 5 - // update cerere visualizaciónglutPostRedisplay () -} // ------------------------------ ---------------------------- // Funcția "main ()" // ------------ ---------------------------------------------- int principal (int argc, char * argv []) GLUT_RGB 
    Distribuiți pe rețelele sociale:

    înrudit
    Cum se deschide un fișier PHPCum se deschide un fișier PHP
    Cum de a sparge un program prin modificarea fișierelor DLLCum de a sparge un program prin modificarea fișierelor DLL
    Cum se creează un fișier executabil în EclipseCum se creează un fișier executabil în Eclipse
    Cum se creează un limbaj de programareCum se creează un limbaj de programare
    Cum se creează un nou proiect Java în EclipseCum se creează un nou proiect Java în Eclipse
    Cum se creează un program simplu în C ++Cum se creează un program simplu în C ++
    Cum se creează un program simplu în CCum se creează un program simplu în C
    Cum se scrie codul standard în C ++Cum se scrie codul standard în C ++
    Cum se scrie un algoritm în limbajul de programareCum se scrie un algoritm în limbajul de programare
    Cum se scrie un program în Python care să arate fraza `Hello world`Cum se scrie un program în Python care să arate fraza `Hello world`
    » » Cum se face un cub în OpenGL

    © 2011—2020 ertare.com