Hoe maak je een kubus in opengl
OpenGL is een 3D-programmeergereedschap waarmee u complexe driedimensionale beelden van eenvoudige formulieren kunt maken. Uit dit artikel leert u hoe u ermee kunt tekenen, zal een eenvoudige kubus helpen die in drie dimensies kan worden geroteerd!
Stappen
Deel 1 van 3:
Eerste installatieeen. Installeer OpenGL. Start S OpenGL-installatiegeleiders op jouw computer. Als OpenGL en de compiler met u al hebben, kunt u deze stap overslaan en naar de volgende gaan.
2. Maak een document. Maak een nieuw bestand in uw favoriete codeeditor en sla deze op als MyCube.C
3. Voeg #inclusief toe. Hier zijn de belangrijkste #include-richtlijnen die u nodig hebt. Het is belangrijk om te onthouden dat richtlijnen voor verschillende besturingssystemen verschillend zijn, en daarom is het noodzakelijk om alles te kiezen, zodat het programma universeel is en het kan worden gelanceerd in elk systeem.
// bevat # omvatten#Erbij betrekken #Erbij betrekken #DEFINE GL_GELXT_PROTOTYPES # IFDEF __Apple __ # Omvat # else # opnemen #endif
4. Voeg functionele prototypen en globale variabelen toe. De volgende stap zal functionele prototypen verklaren.
// Functioneel prototypesvoid-display () - Void Specialkys () - // Global Variablessdeble Rotate_y = 0-Double Rotate_x = 0-
vijf. Stel de hoofd () functie in.
Int Main (INGRC, CHAR * ARGV []) // Initialiseer glut en proces Gebruiker ParametersGlutinit (& ARGC, ARGV) - // Vraag een dubbel bufferende venster aan, Z-bufferisatie en kleurenschema True ColorGlutinitDisplayMode (Glut_double
Deel 2 van 3:
Display () functieeen. Begrijp de toewijzing van de functie () functie. Alle werkzaamheden op tekenen van Cuba valt op fragiele lijnen van deze functie. Het idee in het algemeen is als volgt: u tekent zes afzonderlijke gezichten van de kubus en plaats ze in de juiste posities.
- Voor elk gezicht definieert u vierhoek en OpenGL verbindt ze met lijnen en vul de kleur die u kiest. Hieronder zal het zien hoe het te doen.
2. Voeg de GLCLEAR () -functie toe. Allereerst, werken we met deze functie, we hebben nodig Duidelijke kleur en z-buffer. Zonder dit zal onder het nieuwe patroon oud worden gezien en zullen de door het programma getrokken objecten onjuist worden geregeld.
Void display () gl_depth_buffer_bit)-
3. Voeg GLBEGIN () EN GLEND (). OpenGL-objecten zijn combinaties van verschillende polygonen. Team GLBEGIN () Sta ons toe om een object met u te tekenen - het is als een potlood, die u een figuur tekent zonder het van papier te scheuren. Om het potlood van het vel te scheuren en begin iets nieuws te tekenen, heb je een team nodig Glend (). In dit artikel zullen we GL_POLYGON gebruiken om elke rand van de kubus te tekenen, hoewel het mogelijk is om andere parameters zoals GL_LINE, GL_QUAD of GL_TRIANGLE te gebruiken om andere vormen te maken.
// Multicolor Side - Frontglbegin (GL_POLYGON) - // Verses Toevoegen in de volgende stepglend ()-
4. Voeg de functie GlvertEx3F () toe. Nu u het programma hebt uitgelegd dat u wilt beginnen met het tekenen van een polygoon, hebt u nodig Vertices instellen Object. De Glverex-functie heeft verschillende vormen, waarvan het gebruik afhangt van wat u met uw object wilt doen.
// Multicolor Side - FrontGLBEGIN (GL_POLYGON) -GLVVERTEX3F (-0.vijftig.vijftig.5) - // p1glvertex3f (-0.5.0.vijftig.5) - // p2glvertex3f (0.5.0.vijftig.5) - // p3glvertex3f (0.vijftig.vijftig.5) - // p4glend ()-
vijf. Voeg de functie GLCOLOR3F () toe. GLCOLOR handelt op veel manieren vergelijkbaar met Glverex. Punten U kunt gegevenstypen van korte, geheel getal, dubbel of float instellen. Elke kleur heeft een waarde van 0 tot 1. Alle nullen zijn zwart, alle eenheden - respectievelijk wit. Figuur 3 in GLCOLOR3F () geeft het RGB-kleurenschema aan zonder alfakanaal. Alpha-kanaalkleuren zijn verantwoordelijk voor de transparantie ervan. Als u de alfakanaalwaarde wilt wijzigen, gebruikt u GLCOLOR4F () met de laatste parameter van 0 tot 1, dat is, van ondoorzichtig tot transparantie.
// Multicolor Side - Frontglbegin (GL_POLYGON) -GLCOLOR3F (1.0, 0.0, 0.0) -GVERVEX3F (0.vijftig.vijftig.5) - // P1 RedglColor3F (0.0, 1.0, 0.0) -GVERVEX3F (0.5.0.vijftig.5) - // P2 GreenglColor3F (0.0, 0.0, 1.0) -GVERVEX3F (-0.5.0.vijftig.5) - // P3 Blueglcolor3F (1.0, 0.0, 1.0) -GVERVEX3F (-0.vijftig.vijftig.5) - // P4 PurpleGLend ()-
6. Teken andere gezichten Cuba. Beter, natuurlijk, als u zelf de locatie van de rest van de kubus en elk van de hoekpunten vindt, maar omwille van de eenvoud hebben we ze voor u berekend. De code wordt gegeven B De definitieve functie-display () onderstaand.
// White Side - Achterglbegin (GL_POLYGON) -GLCOLOR3F (1.0.1.0, 1.0) -GVERVEX3F (0.vijftig.vijftig.5) -GVERVERTEX3F (0.5.0.vijftig.5) -GVERVERTEX3F (-0.5.0.vijftig.5) -GVERVERTEX3F (-0.vijftig.vijftig.5) -Glog () - // Violet Side - RuralGLBEGIN (GL_POLYGON) -GLCOLOR3F (1.0,0.0.1.0) -GVERVEX3F (0.vijftig.vijftig.5) -GVERVERTEX3F (0.5.0.vijftig.5) -GVERVERTEX3F (0.5.0.5.0.5) -GVERVERTEX3F (0.vijftig.5.0.5) - Glend () - // Green Side - LeftGLBEGIN (GL_POLYGON) -GLCOLOR3F (0.0.1.0,0.0) -GVERVEX3F (-0.vijftig.5.0.5) -GVERVERTEX3F (-0.5.0.5.0.5) -GVERVERTEX3F (-0.5.0.vijftig.5) -GVERVERTEX3F (-0.vijftig.vijftig.5) - Glend () - // Blue Side - Ouderglbegin (GL_POLYGON) -GLCOLOR3F (0.0,0.0.1.0) -GVERVEX3F (0.5.0.5.0.5) -GVERVERTEX3F (0.5.0.vijftig.5) -GVERVERTEX3F (-0.5.0.vijftig.5) -GVERVERTEX3F (-0.5.0.5.0.5) -Glog () - // Rode kant - NIZHNYGLBEGIN (GL_POLYGON) -GLCLECOLOR3F (1.0,0.0,0.0) -GVERVEX3F (0.vijftig.vijftig.5) -GVERVERTEX3F (0.vijftig.5.0.5) -GVERVERTEX3F (-0.vijftig.5.0.5) -GVERVERTEX3F (-0.vijftig.vijftig.5) - Glend () - Glflush () - Glutswapbuffers ()-
Deel 3 van 3:
Interactief programmaeen. Voeg de functie SpecialKeys () toe. In principe is alles bijna klaar, maar de kubus is alleen getekend en draait niet. Om dit te doen, maakt u Specialkys () functie, die de kubus roteert door op de pijltjestoetsen te drukken!
- Het was voor deze functie die de wereldwijde variabelen rotate_x en rotate_y werden aangekondigd. Wanneer u op de pijltjestoetsen "Links" en "Rechts" drukt, neemt de rotatiewaarde van de rotatie in of af van vijf graden. Evenzo zullen we de waarde van rotate_x wijzigen, maar al op de pijltoetsen "Up" en omlaag drukken.
Void Specialkys (INT-KEY, INT X, INT Y) {// RECHTSPROWN - Toenemende rotatie van 5 gradenIF (sleutel == glut_key_right) rotate_y + = 5 - // linker pijl - vermindering van rotatie van 5 gradenelse indien (sleutel == glut_key_left) rotate_y - = 5-anders if (key == glut_key_up) rotate_x + = 5-anders if (key == glut_key_down) rotate_x - = 5 - // verzoek om een screenglutpostredplayplay () -}
2. Voeg GLROTATE () toe. Het laatste wat we zullen doen is een touw toevoegen die ons in staat stelt om het object te roteren. Keer terug naar de functie SCHERM () En vóór het beschrijven van de voorkant, voeg dan toe:
// Reset TransformationsGlloadIdentity () - // Rotatie bij het wijzigen van de gebruiker Rotate_x en Rotate_Yglotatef-waarden (Rotate_x, 1.0, 0.0, 0.0) -glrotatef (rotate_y, 0.0, 1.0, 0.0) - // Multicolor Side - Front....
3. Voeg de volgende opdrachten toe voor twee-time kubusschaling langs assen X en Y, om een kubus 180 graden langs de as van de as te draaien, evenals om de kubus met 0,1 langs de x-as te verplaatsen. Zorg ervoor dat alle relevante opdrachten, inclusief eerder opgegeven GLROTATE () -opdrachten, in de juiste volgorde worden opgegeven. Als u bang bent om u te vergissen, zie de definitieve versie van het programma aan het einde van het artikel.
// Andere transformatiesGltranslatef (0.10.0, 0.0) -glrotatef (180, 0.0, 1.0, 0.0) -glscalef (2.0, 2.0, 0.0)-
4. Compileren en voer de code uit. Stel dat u GCC als compiler gebruikt, dus voer de volgende opdrachten in op de terminal:
Op Linux: GCC CUBE.C -O CUBE -LGLUT -LGL./ MyCuben Mac: GCC -O foo foo.C -Framework Glut -Framework OpenGL./ MyCube Windows: GCC -Wall -Fooo Foo.C -LGLUT32CU -LGLU32 -LOPENGL32./ MyCube
vijf. Controleer de definitieve code. Hier is de definitieve code die is gemaakt door de auteur van het artikel waarin opmerkingen niet werden vertaald.
//// Bestand: MyCube.C // Auteur: Matt Daisley // Gemaakt: 4/25 / 2012 // project: broncode voor het maken van een kubus in OpenGL // Beschrijving: Creëert een OpenGL-venster en trekt een 3D-kubus // die de gebruiker kan draaien met behulp van de Pijltjestoetsen // // Controles: Links Pijl - Roteren Links // Rechte pijl - Rigeer rechts // omhoog pijl - draai omhoog // omlaag pijl - Draai naar beneden // ------------ -------------------------------------------- // omvat // - --------------------------------------------------- - ------- # omvatten#Erbij betrekken #Erbij betrekken #DeFine GL_GELXT_PROTOTYPES # IFDEF __Apple __ # Omvat # else # omvatten # endif // ----------------------------------- - ------------------------ //-functie prototypes // ---------------------- --- -------------------------------------- Void Display () - Void SpecialKeys () - // ------------------------------------------------ ----- ------- // Global variabelen // ----------------------------------- -------- ---------------------- Double rotate_y = 0-Double Rotate_x = 0 - // ---------- --------------------------------------------------- / / Display () Callback-functie / / ----------------------------------------------- -------- --------- Veel display () // Clear Screen en Z-BuffergLClear (GL_COLOR_BUFFER_BIT // ---------------------- ------------------------------------------ // Specialkys () Callback-functie // - ---------------------------------------------------- --------- void SpecialKeys (INT-toets, int x, int y) {// rechter pijl - verhoog de rotatie met 5 diploma (sleutel == glut_key_right) rotate_y + = 5 - // linker pijl - afnemende rotatie Met 5 grenzen if (key == glut_key__ Links) Rotate_y - = 5-anders if (key == glut_key_up) rotate_x + = 5-anders if (key == glut_key_down) rotate_x - = 5 - // verzoek display upategistrodisplay () -} // -------- --------------------------------------------------- - - // Main () functie // ----------------------------------------- --- ------------------- IN MAIN (INT ARGC, CHAR * ARGV []) Glut_Depth) - // Maak vensterGlutCreatewindow ("Geweldige kubus") - // Schakel Z-Buffer Dieptest TestGleenable (GL_DEPTH_TEST) - // Callback FunctionsGlutdisplayFunc (Display) -GlutspecialFunc (SpecialKeys) - // Pass Control to Glut for EventsGlutmainLoop () - // Keer terug naar Osreturn 0-
Deel in het sociale netwerk: