gushelom.ru

Hur man skapar en kub i OpenGL

OpenGL är ett kraftfullt 3D-programmeringsverktyg som används för att rita komplexa tredimensionella scener från enkla primitiva. Denna artikel kommer att lära dig hur man ritar en enkel kub som du kan rotera och visa i tre dimensioner.

För detta projekt behöver du en kodredaktör och några programmeringsbegrepp.

Del 1

Initial Settings och Main () Funktion

Installera OpenGL

  • För att börja, följ dessa steg för att installera OpenGL på ditt system. Om du redan har installerat på OpenGL-datorn och en C-kompilator kan du hoppa över det här steget.

Skapa dokumentet

  • Skapa en ny fil med din favorit kodredigerare och spara den som ilmiocubo.c

#includes

  • Det här är de grundläggande förutsättningarna som vi behöver för vårt program. Det är viktigt att förstå att de olika operativsystemen kräver olika inslag. Var noga med att inkludera dem alla för att säkerställa maximal mångsidighet för ditt program.

Inkluderar // #include #include #include #define GL_GLEXT_PROTOTYPES #ifdef __ __APPLE #include #include #else #endif

Prototyper Funktioner och Globala Variabler

  • Nästa steg är att deklarera några prototyper av funktionerna.

    // Prototyper av funzionivoid display () - void specialKeys () - // Variabler Globalidouble rotate_y = 0-dubbel rotate_x = 0-
  • Senare kommer alla dessa funktioner och variabler att förklaras i detalj, vid tidpunkten för genomförandet. För nu är det viktigt att deklarera dem.

Ställ in huvudfunktionen ()

  • int huvud (int argc, char * argv []) GLUT_RGB 

Del 3

Skärmfunktionen ()
  • Alla funktioner i ritningen av vår kub kommer att utföras i denna funktion. Den allmänna idén att göra kuben är att dra alla sex ansikten individuellt och placera dem på lämpligt sätt.

  • Konceptuellt kommer varje sida att dras för att definiera de fyra hörnen och låta OpenGL ansluta linjerna och fylla dem med en användardefinierad färg. Senare hittar du de steg som är nödvändiga för denna operation.

glClear ()

  • Det första steget att följa i denna funktion är återställ färgen och bufferten Z. Utan dessa steg kan den gamla designen fortfarande vara synlig under den nya och objekten kanske inte är i rätt läge på skärmen.

void display () // Rensa skärmen och rensa bufferten ZglClear (GL_COLOR_BUFFER_BIT
  • Vi måste infoga två rader av kod för den här funktionen. de är glFlush () - och glutSwapBuffers () -, som sätter in den dubbelbuffrande effekten som vi beskrivit tidigare.
  • Del 4

    Interaktivitet för användaren

    specialKeys ()

    • Vi är nästan färdiga, men för tillfället kan vi rita en kub och vi har ingen möjlighet att rotera den. Att göra det Vi kommer att skapa en specialKeys () -funktion som tillåter oss att använda pilarna för att rotera kuben!

    • Denna funktion är anledningen till att vi deklarerade de globala variablerna rotate_x och rotera_y. När vi trycker på vänster och höger pilar kommer vi att öka eller minska värdet på rotate_y med 5 grader. På samma sätt, när vi trycker uppåt och nedåtpilarna, roterar_x varierar i enlighet därmed.

    void specialKeys (int nyckel, int x, int y) {// Höger pil - ökar rotationen av 5 gradiif (nyckel == GLUT_KEY_RIGHT) rotate_y + 5 = - // Vänster pil - reducera rotationen av 5 gradielse if (key = = GLUT_KEY_LEFT) rotate_y - = 5-else if (nyckel == GLUT_KEY_UP) rotate_x + = 5-else if (nyckel == GLUT_KEY_DOWN) rotate_x - 5 = - // Begär dell`immagineglutPostRedisplay uppdatering () -}

    glRotate ()

    • Det sista stycket kod är att lägga till det uttalande som kommer att rotera vårt objekt. Återgå till funktionen "display ()" och före FRONT-sidan lägger du till följande rader:

      // Återställ trasformazioniglLoadIdentity () - // Rotera när användaren förändringar rotate_x och rotate_yglRotatef (rotate_x, 1,0, 0,0, 0,0) -glRotatef (rotate_y, 0,0, 1,0, 0,0) - multicolor // Side - FRONT ....
    • Först märker du att syntaxen av glRotatef () liknar glColor3f () och glVertex3f () men kräver alltid 4 parametrar. Den första parametern är rotationsgraden som ska tillämpas. De tre följande parametrarna definierar vilka axlar som ska roteras, med x den första, y den andra och z den tredje. För tillfället måste vi bara rotera kuben längs x- och y-axlarna.

    • Alla de omvandlingar vi skriver i vårt program behöver linjer som liknar dessa. Konceptuellt tolkar vi denna operation som en rotation av objektet runt x-axeln av den mängd som definieras av rotate_x och sedan en rotation runt y-axeln rotat_y. OpenGL kombinerar emellertid alla dessa uttalanden i en matrisomvandling. När vi kallar visningsfunktionen konstruerar vi en transformationsmatris e glLoadIdentity () Det garanterar oss att börja med en ny matris i varje steg.

    • De andra transformationsfunktionerna som vi kunde tillämpa är glTranslatef () och glScalef (). Dessa funktioner liknar glRotatef (), med undantag för att de bara accepterar 3 parametrar, det vill säga värdena längs x-, y- och z-axlarna för att översätta eller skala objektet.

    • För att få rätt effekt när vi tillämpar alla tre omvandlingar till ett objekt, måste vi tillämpa dem i rätt ordning. Skriv dem alltid i denna ordning: glTranslate, glRotate, sedan glScale. OpenGL tillämpar i huvudsak dessa omvandlingar från sista till första. För att förstå detta koncept försök att föreställa sig skillnaderna i visualiseringen av en enkel 1x1x1-kub om OpenGL tillämpade dem från första till sista och sedan från sista till första.

    • Lägg till följande kommandon för att skala kuben med 2 längs x-axeln, med 2 längs y-axeln, rotera kuben 180 grader längs y-axeln och översätt den med 0,1 längs x-axeln. Var noga med att skriva dem i rätt ordning som beskrivs ovan. (Om du är i tvivel hittar du rätt ordning i slutkoden i slutet av guiden)

      // Mer trasformazioniglTranslatef (0,1, 0,0, 0,0) -glRotatef (180, 0,0, 1,0, 0,0) -glScalef (2,0, 2,0, 0,0) -

    sammanställning

    • Det sista steget för att slutföra ditt första OpenGL-projekt är att slutför och kör koden. Förutsatt att du använder gcc som en kompilator, köra följande kommandon från terminalen för att kompilera och testa programmet.

      På Linux: gcc -o cube.c kub -lglut -lGL./ ilmiocuboSu Mac: gcc -o foo foo.c -Framework GLUT -Framework OpenGL./ ilmiocuboSu Windows: gcc -Wall -ofoo foo.c -lglut32cu -lglu32 - lopengl32./ ilmiocubo

    Del 5

    Slutkod
    • Här har du äntligen skapat ditt första OpenGL-program! Nedan hittar du källkoden som referenspunkt.

    //// Fil: ilmiocubo.c // Författare: Matt Daisley // Skapad: 25/4/2012 // Projekt: källkoden för att skapa en kub i OpenGL // Beskrivning: Skapar en OpenGL fönster och rita en 3D-kub / / Vad du kan rotera med hjälp av riktningspilarna // // Kontroller: vänster pil - rotera vänster // höger pil - rotera höger Arrow // - // rotera uppåt nedåtpilen - vrid ner // ------------------------------------------------ ---------- // Inkluderar // ----------------------------------- ----------------------- #include #include #include #define GL_GLEXT_PROTOTYPES #ifdef __ __APPLE annars # # inkluderar # include # endif // ----- -------------------------------------------------- --- // Prototyper av funktioner // ---------------------------------------- ------------------ void display () - void specialKeys () - // -------------------- -------------------------------------- // Globala variabler // ------ -------------------------------------------------- --double rotate_y = 0-double rotate_x = 0 - // ----- -------------------------------------------------- --- // Visa återkallningsfunktion () // ------------------------------------- --------------------- void display () // Rensa skärmen och rensa bufferten ZglClear (GL_COLOR_BUFFER_BIT // ----------- ----------------------------------------------- // Funktion påminnelse specialKeys () // ------------------------------------------- --------------- void specialKeys (int nyckel, int x, int y) {// höger Pil - ökar rotationen av 5 gradiif (nyckel == GLUT_KEY_RIGHT) rotate_y + = 5- // vänster pil - reducera rotationen av 5 gradielse if (nyckel == GLUT_KEY_LEFT) rotate_y - = 5-else if (nyckel == GLUT_KEY_UP) rotate_x + = 5-else if (nyckel == GLUT_KEY_DOWN) rotate_x - = 5- / / Begär uppdateringen av imagineglutPostRedisplay () -} // ------------------------------------ ---------------------- // funktion huvud () // -------------------- -------------------------------------- int main (int argc, char * argv []) GLUT_RGB 

    Visa mer ... (1)
    Dela på sociala nätverk:

    Relaterade
    Så här justerar du virtuellt minneSå här justerar du virtuellt minne
    Hur konvertera CPP-filer till EXE-filerHur konvertera CPP-filer till EXE-filer
    Hur man skapar 3D-datorspelHur man skapar 3D-datorspel
    Så här skapar du ett Windows-programSå här skapar du ett Windows-program
    Så här skapar du en `Hello World`-konsolansökan i Visual C +Så här skapar du en `Hello World`-konsolansökan i Visual C +
    Hur man skapar ett program i CHur man skapar ett program i C
    Hur man skapar ett enkelt program i C ++Hur man skapar ett enkelt program i C ++
    Hur man ritar ett husHur man ritar ett hus
    Hur man ritar tredimensionella bokstäverHur man ritar tredimensionella bokstäver
    Så här installerar du Qt SDK på UbuntuSå här installerar du Qt SDK på Ubuntu
    » » Hur man skapar en kub i OpenGL

    © 2011—2021 gushelom.ru