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ţie
    un. Î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.
  • Începeţi cu partija din faţă a cublui. Mai târziu Vom adăuga cuuloarea Fiecăruia dintre CELE Şse Feţe.
  • // 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.
  • În Primul rând - câte măsurători veţi Lucra? Figura 3 Din Glverx3f Indijdă Trei dimesiuni. Cu toide acestea, puteţi lucra în 2 şi în 4 măsurători. Scrisoarea f, la rânddul său, indighă fappla că lucrăm cu punct şi virgulă plutitoare. Cu toite acestea, aici puteţi utiliza tipuri întregi, duble sau sparte.
  • Reţineţi Că Zatožite Sunt Sunt în Sens Inververs Accelor de caasornic Săgeţi. Deşi Nu Este Sjednje.
  • Adăugaţi vârfurile Dintre Liniile Glbel () şi Glend ().


  • // 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ţă.
  • Apelarea Glcolor3f (), FaceM FaceCare Vertex Din punctul specifikat în culoarea specianationă. Cu Alte Cuvinte, Dacă Trebui să fie roşii, atuncija doar o singură dată setaţi valoaţi de culoare înainte de apela comonzile ždvversex3f () şi toite vor.
  • PE Exemplul Părţii Din Faţă de Mai Jos, Puteţi Vedea Cum Este setată noua culoare a Fekărui vrh. Când o faci, te poţi familiariariza cu o caracteristică interesntantău florilor OpenGL. Deoarece feecare vârf al Poligonului su propria culoare, OpenGl Combină Automat Cormalile! Codul plasat arată cum je creează paturu vârfuri cu aceeaşi culoare.
  • // 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 ()-
  • Acordaţi Atenţie Ultimelor Două Linii. Acesea Sunt Funcţii GLFLUSH ()- si Glucswapbuffers ()-, Dâd Efectul de Tamponare Dublă, skrbite Spus Mai Sus.
  • Atea 3 DIN 3:
    Program interakcije
    un. 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....
  • Reţineţi Că sintaxa Gloratef (), Care Este Slična cu Sintaxa Lui Glcolor3f () şi GLVVERTEEX3F (), Dar întotdeauna neceseită. Mai întâi - Ungiuul de rotaţie în razreda. URMătotootele Trei Ax Pentru Care Se roteşte rotaţia, în ordinacija x, y, z. Până acum, trebuie să roter cubul peua auă, x şi y.
  • Pentru toatessările PE Care Le Spt Necesesare Linii Similare. De fatt, reprezentăm rotaţia obistlui de-a a lungul axei x ca o schimbare valorii rotate_x şi rotaţia axei axei - ca o schimbare a valorii rotitului_y. Cu Za toide Acestea, OpenGL VA Uni totul într-o matrice de transformare. Fie că apelaţi Funcţia de afişare, veţi crea o matrice de transformare şi Gladidedetatea () Vă va dozvola să începeţi de fiacomre dată cu o nouă matrice.
  • Alte Funcţii de Transformare PE Care Le Puteţi Utiliza este Gltransalf () şi Glcalef (). Ele Sunt Similare Cu Glotatef (), Cu Excepţia faptului că doar trei parametri necesită: valorile x, y şi z pentru.
  • Astfel încât totul este afişat corect clect toate când cloate trei transformatări Sunt aplat la UN-a, trebuie să setaţi transformări în ordinacija corspinzăare, şi anome GlTranslate, Glotat, Glscale - Şi Niciodată Altfel. OpenGL Transformă Un obod Care Citeşte Kubul de Jos în Sus. Pentru a acest Lucru, imaginaţi-vă cubul 1x1x1 va alea grijă deateonările dacăy) Cubul, Citirea Instrucţiunilor de la partij de Jos în.
  • 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-
  • Slične publikacije