Cum s să faci un cull în opengl
OpenGL Este UN instrument de programare 3D skrb vă miruje să creaţi imagini tridimenzale kompleks de la formulare jednostavan. DIN Acest Articol, Veţi învăţa cum să atrageţi cu acesta va ajuta UN Cub Simpu Care Pote Fi Rotit în Trei dimesiuni!
Pasi
Agea 1 DIN 3:
Instalare Iniţialăun. Instalaţi OpenGl. Početak S Ghiduri de instalare OpenGL PE kalkulator tau. Dacă OpenGL şi compilatorlul Cu DVS. Aveţi Deja, Puteţi sări Peste Acest Pas şi Mergeţi la Următorul.
2. Creaţi UN dokument. Creaţi Un Fişier Nou în editour DVS. De Cod preferira şi salvaţi-l ca mycube.C
3. Adăugaţi #include. IATă Principelele Direktiva #inlude de Care Aveţi Nevoie. Este Važno Să ne amina Sistema DISTRARE TRANT DISTRITE SISTEME DIORARE Sunt Diferite şi, Prin Urmare, este Necesar Să alegeţi Totul Astfel încât Kubul Să Fie Universal şi Poete fi Lansat în Orices Sistem.
// uključuju # uključujući#Include #Include #Define gl_gelxt_protipove # ifdef __apple __ # uključujući # altcineva # uključujući #endif
4. Adăugaţi Prototipuri Funcţionale şi variabile globale. Următorul pas va dekala Prototipuri Funcţionale.
// Afişaj de Prototipov () - praznine specialyys () - // Global VariablesDeble Rotate_y = 0-Dvostruki rotate_x = 0-
Cinci. Setaţi Funcţia principală ().
Int Main (Int argc, Char * Argv []) // Iniţializaţi parametri Glut şi Proces parametreglutinit (& argc, Argv) - // Solitaţi o fereakă de Tamponare Dublă, Z-Biferizare şi Schema de Culori Adevărat ColorglutinitDitInDitModa
Atea 2 DIN 3:
Afişaj () Funcţieun. Înţelegeţi atribuirea funcţiei afişajului (). Zoite Lucrările La desenul Cubei Vor Cădea p Linii Fragleal Acesei Funcţii. Ideea în General Este DUPă Cum Urmează: Desenaţi şse Feţe odvojeni ALE Cubului şi Plasaţi-le în Poziţiile Corespinzăare.
- Pentru Faecare Faţă Veţi Definice Patrouri, iar OpenGL le conectează cu linii şi umple culoarea PE care o alegeţi. Mai jos va odrezati cum să o facă.
2. Adăugaţi Funcţia Glinle (). În Primul rând, Care Lucrează cu această Funcţie, avem nevoie Culoare clar şi tampon z. Fără Acest Lucru, Sub Noul Model Va fi văzut Vechi, IAR Obicele Trase de Program Vor-Aranjate Increect.
Void afişaj () gl_depth_buffer_bit)-
3. Adăugaţi Glbel () şi Glend (). Opeted OpenGL Sunt Combinaţii de Diverşi poligoane. Echipă Glbel () Dozvola-ne să să tagem Un poticaj Cu DVS. - Este CA Un Cruion, Ple Care îl tragţi o figură fără să o rupeţi de hârtie. Pentru rupe Creioul Din Foaie şi A începe să desenaţi ceva nou, aveţi nevoie de o echipă Glend (). În acest articol, vom folsi gl_polygon pentru desena feicare margine, deşi este posibilă utilizarea opis.
// bočni multicolor - frontGrbegin (GL_POLIGON) - // Versuri adăugaţi în Următorul u korabu ()-
4. Adăugaţi Funcţia GLVVERTEX3F (). Acum Că Aţi Eksplicat Kubul Ple doriţi să-l începeţi să desenaţi Un poligon, aveţi nevoie Setaţi vârfurile Poticaj. Funcţia GLVVENEX su Mai Mulle Forme, Utilizarea Căreia Depinde de CEA CE Intenţionaţi Să FaceAţi Cu Obistl DVS.
// bočni multicolor - frontGrbegin (GL_POLYGON) -Gluverx3f (-0.Cincezeci.Cincezeci.5) - // p1gluverx3f (-0.pet.0.Cincezeci.5) - // p2gluverx3f (0.pet.0.Cincezeci.5) - // p3gluverx3f (0.Cincezeci.Cincezeci.5) - // P4GEND ()-
Cinci. Adăugaţi Funcţia Glcolor3f (). Glcolor Acţionează în Multe Moduri Similare Cu Glverxul. Punce Puteţi seta Tipurile de datum de Scurtă, număr întreg, dublu sau float. Feicare Culoare su o Valoare de la 0 LA 1. Zoite Zerourile Sunt Negre, toide Unităţile - odnos, Alb. Figura 3 DIN GLCOLOR3F () Schema de culori RGB Fără Canalul Alfa. Culorile Canalelor Alfa Sunt UndersAbile de TransParenţa SA. Pentru achimba valoalea canalului alfa, utilizaţi Glcolor4f () cu ultimal parametru de la 0 LA 1, Adică de la Opac la transparenţă.
// bočni multicolor - frontGRBegin (GL_POLYGON) -GLColor3f (1.0, 0.0, 0.0) -Gluverx3f (0.Cincezeci.Cincezeci.5) - // P1 RedGlolor3f (0.0, 1.0, 0.0) -Gluverx3f (0.pet.0.Cincezeci.5) - // p2 greenglolor3f (0.0, 0.0, 1.0) -Gluverx3f (-0.pet.0.Cincezeci.5) - // p3 blueglcolor3f (1.0, 0.0, 1.0) -Gluverx3f (-0.Cincezeci.Cincezeci.5) - // P4 Purpleglend ()-
6. Desenaţi Alte Feţe Kuba. Mai Bine, bineînţeles, dacă tu găseşti locaţia restorana cubului şi a fekăruia dintre vârfuri, Dar de Dragul Simpăţii Le-am Calculat Pentru DVS. Codul este dat b Afişajul Final Al Funcţiei () De mai Jos.
// bočni albuc - kupanje (gl_polygon) -GLcolor3f (1.0.jedan.0, 1.0) -Gluverx3f (0.Cincezeci.Cincezeci.5) -Gluverx3f (0.pet.0.Cincezeci.5) -Gluverx3f (-0.pet.0.Cincezeci.5) -Gluverx3f (-0.Cincezeci.Cincezeci.5) - () - // bočni violet - ruralGrbegin (Gl_polygon) -GLcolor3f (1.0,0.0.jedan.0) -Gluverx3f (0.Cincezeci.Cincezeci.5) -Gluverx3f (0.pet.0.Cincezeci.5) -Gluverx3f (0.pet.0.pet.0.5) -Gluverx3f (0.Cincezeci.pet.0.5) - - // Verde bočni - stâng (Gl_polygon) -GLcolor3f (0.0.jedan.0,0.0) -Gluverx3f (-0.Cincezeci.pet.0.5) -Gluverx3f (-0.pet.0.pet.0.5) -Gluverx3f (-0.pet.0.Cincezeci.5) -Gluverx3f (-0.Cincezeci.Cincezeci.5) -Gend () - // Albastru - SidegLBegin (GL_POLYGON) -GLColor3f (0.0,0.0.jedan.0) -Gluverx3f (0.pet.0.pet.0.5) -Gluverx3f (0.pet.0.Cincezeci.5) -Gluverx3f (-0.pet.0.Cincezeci.5) -Gluverx3f (-0.pet.0.pet.0.5) - - // Roşu lateral - nizhnyglbegin (gl_polygon) -GLcolor3f (1.0,0.0,0.0) -Gluverx3f (0.Cincezeci.Cincezeci.5) -Gluverx3f (0.Cincezeci.pet.0.5) -Gluverx3f (-0.Cincezeci.pet.0.5) -Gluverx3f (-0.Cincezeci.Cincezeci.5) -Kend () - GLFLUSH () - Glutwapfffors ()-
Atea 3 DIN 3:
Program interakcijeun. Adăugaţi Funcţia SpealKeys (). În principu, totul este aproape gata, Dar cubul este desenat Numai şi nu se roteşte. Pentru lica Acest Lucru, Creaţi Funcţia SpealKeyys (), Care VA roti kubul apăsând tastele săgeată!
- Fost pentru această Funcţie, au frost anunţate variabilere globale rotale_x şi rotate_y. Când Apăsaţi tastele săgeţi "stâng" şi "dreapta", valoarea rotate_y vastea sau vastea cu chice razreda. În mod slično, VOM Schimba Valoarea Rotter_x, Dar Deja Apăsând Tastele săgeată "Up" şi Jos.
Speciali de speciali (int Key, int y) {// săgeată dreapta - Creşteata rotaţiei de 5 razredzif (tasta == glut_key_right) rotter_y + = 5 - / // săgeata din stânga - Restemea Rotaţiei de 5 Gredyselse ako (Tasta == Glt_key_left) rotter_y - = 5-altice ako (tasta == glut_key_up) rotter_x + = 5-alty ako (tasta == glut_key_Dowodownt) rotate_x - = 5 - // solicarea pentru aktualni screenglutrodsplay () -}
2. Adăugaţi Glotat (). Ultimal Lucru Ple Care îl Vom Face Este Să adăugăm Un şir Care Să ne dopustitiă să roterscă obistlul. Reveniţi la funcţie Afişaj () Şi înainte de opisuju fondovu, adăugaţi:
// Resetiranje transformăriglounttate () - // rotaţie la Schimbarea valorilor utilizatorului rotate_X.0, 0.0, 0.0) -GLROTATEF (rotate_y, 0.0, 1.0, 0.0) - // bočni multicolor - front....
3. Adăugaţi UrmăoArele Comenzi Pentru Scallua Cubului de-de-de-a Axelor X şi y, pentru a roti UN-a DE 180 DE ocjena DE-A Lungul Axei Axei, precum şi pentrua deplasa cubul cu 0,1 de-a lungul axei x. Asiguraţi-vă că tate comenzile relevantan, inclusiv comnzile de gigotate specifikat prednji (), Sunt specifikata în ordinacija corectă. Dacă vă este frică să vă confundaţi, consultanţi versiunea finală i programski la sfârşitul articolului.
// Alte TransformltTranslatef (0.10.0, 0.0) -GLROTATEF (180, 0.0, 1.0, 0.0) -GLScalef (2.0, 2.0, 0.0)-
4. Compilaţi şi rulaţi codul. Să PestuufuNem Că Utilizaţi GCC CA UN UN-a, Deci Uvodi URMăoArele Comonzi La terminal:
PE Linux: Cube GCC.C-kube -lglut -lfl./ MyCuben Mac: GCC -O Foo foo.C -Framework tlut -Framework OpenGL./ MyCube Windows: GCC-WOOOO.C-lglut32Cu -lglu32 -lopengl32./ MyCube
Cinci. Verificaţi Codul Final. AICI Este CODUL FUNACA CREAT DE AutoUrul articolului, în Care PassAţile Nu au frost Traduse.
/// Fişier: MyCube.C // autor: matt daisley // cheat: 4/25 / 2012 // namit: codul sursă pentru cullu cub u UN-u în OpenGL // Descriere: Creează Un OpenGL prozor şi Atrage UN CUB 3D // PE Care Utilizatorul le Poate Roti Cu ajuturel tastele săgeată // // conspole: stânga rotire la stânga arrow // săgeată dreapta - Rotire la Dreapta // Sus Rotire Sus // strijela Down Rotir în Jos // Arrow ------------ - -------------------------------------------- // - ------------------------------------------------- - - - ------- # uključujući#Include #Include #Define GL_GELXT_PROTOTYPES # ifdef __apple __ # Uključujući # # JOŠ Uključujući # endif // --------------------------------- - ------------------------ // Funkcija Prototipuri // ------------------- --- -------------------------------------- Afişare void () - () void specialkeys - // ----------------------------------------------- ----- -------- // variabile globale // ------------------------------- ------- ---------------------- dublu rotate_y = 0-dublu rotate_x = 0 - / / --------- ------- ------------------------------------------ / / Afişaj () Funcţia povratni poziv / / ------------------------------------------ - ------- --------- prikaz NU Apare () // Clear Screen şi z-bufferglclplear (GL_COLOR_BUFFER_BIT // --------------- - - ------- --------------------------------- // SpecialKeys () povratnog / / FUNCţIA - ------- ---------------------------------------- ---- - --------- Specialkeys praznina (Tasta int, int x, int y) {// Sageata Dreapta - Creşterea Rotatia 5 Degreeif (== elementa glut_key_right) + rotate_y = 5 - // săgeată Stâng - Micşorarea Rota de 5 Remetelse Ako (Cheie == glut_key_ stâng) rotate_y - = 5-drugo ako (element == glut_key_up) rotate_x + = 5-drugo ako (Element == glut_key_down) rotate_x - = 5 - // CERERE DE AFIşARE UPDATEGLUTRODISPLAY () -} // ------ ------------------------------ -------------------- - - // ravnatelj) Funcţia (// -------------------- ------------------- --- ------------------ Int Main (Int argc, Char * Arguv [ ]) Glut_depth) - // Crearea WindowGluTCreateWindow ("Cube strašan") - // Activarea Z-Tampon de PROFUNZIME TESTGLENABLE (GL_DEPTH_TEST) - // povratnog FunctionsGlutDisplayFunc (Display) -GlutspecialFunc (SpecialKeys) - // proći kontrolu La Glut pentru Eventsglutmainloop () - // Revenire La Osreturn 0-