dmylogi.com

Hoe om `n kubus in OpenGL te maak

OpenGL is `n veelsydige driedimensionele programmeringsinstrument wat gebruik word om komplekse tonele in 3D te teken deur eenvoudige roetines. Hierdie artikel sal jou leer hoe om `n kubus te teken wat jy kan draai om dit in drie dimensies te sien!

Vir hierdie projek benodig jy `n kode redakteur en `n bietjie programmeringskennis met die C-taal.

stappe

Deel 1
Aanvanklike konfigurasie en hoof ()

1) Installeer OpenGL

  • Om te begin, volg hierdie stappe om OpenGL te installeer in u stelsel. As jy dit reeds bykomend tot die C-samesteller het, kan jy hierdie stap oorskiet en na die volgende een gaan.

2) Skep die dokument

  • Skep `n nuwe lêer in jou gunsteling kode redakteur en stoor dit as: micubo.c

3) Biblioteke (# insluit)

  • Dit is die basiese biblioteke wat u vir u program benodig. Dit sal belangrik wees om in gedagte te hou dat daar, na gelang van die bedryfstelsel, ander nodige biblioteke mag wees. Maak seker dat jy al hierdie items byvoeg sodat jou program veelsydig is en deur enige gebruiker uitgevoer kan word.

// Sluit in # sluit # insluit # insluit # definieer GL_GLEXT_PROTOTYPES # ifdef __APPLE __ # sluit # else # include #endif

4) Funksie prototipes en globale veranderlikes

  • Die volgende stap sal wees om `n paar funksie prototipes te verklaar.

    / Prototipes van funksionele vertoning () - void specialKeys () - / / Global variables double rotate_y = 0-double rotate_x = 0-
  • Elkeen van hierdie funksies en die globale veranderlikes sal in detail verduidelik word, aangesien u later volgens hierdie handleiding hulle implementeer. Vir nou sal die belangrike ding wees om hulle te verklaar.

5) Konfigureer die hoof () funksie

  • int hoof (int argc, char * argv []) // Initialiseer die GLUT en gebruikers parameters prosesoglutInit (&argc, argv) - // Versoek venster met regte kleur en dubbele buffer met Z-buffer glutInitDisplayMode (GLUT_DOUBLE 

Deel 2
Die "display ()" funksie

  • Al die werk om die kubus te teken sal met hierdie funksie gedoen word. Die hoofidee sal wees om die 6 kante te teken en hulle in die regte posisie te rangskik.

  • Konseptueel moet u die vier hoeke aan die een kant definieer en OpenGL verbind die kolletjies met lyne en kleur hulle soos u dit gedefinieer het. Hier sal ons die stappe doen om dit te doen:

1) glClear () funksie

  • Die eerste stap wat u in hierdie funksie moet inneem, sal wees maak die kleur en die Z-buffer skoon, Anders sal die ou tekeninge nog sigbaar wees onder die nuwe tekeninge en die getekende voorwerpe sal nie in die regte posisie op die skerm wees nie.

ongeldige vertoning () // Verwyder die skerm en die Z-bufferglKlear (GL_COLOR_BUFFER_BIT
  • U moet ook twee laaste lyne kode vir hierdie funksie insluit: glFlush () - en glutSwapBuffers () -, wat jou die dubbelbuffer-effek sal gee.


  • Deel 3
    Interaktiwiteit met die gebruiker

    1) specialKeys () funksie

    • Alles is amper gereed: jy het reeds die kubus, maar daar is geen manier om dit te draai nie. Om dit te doen, skep `n funksie spesiale keuses ()om jou toe te laat om die pyltjie sleutels met pyle te druk en die kubus te draai!

    • Vir hierdie funksie moes jy die globale veranderlikes "rotate_x" en "rotate_y" verklaar. As jy die pyltjie sleutels regs en links druk, sal die veranderlike "rotate_y" met 5 grade verhoog of verlaag. Net so, wanneer jy die pyltjie sleutels op en af ​​druk, sal die veranderlike "rotate_x" met 5 grade verhoog of verlaag.

    specialKeys leemte (int sleutel, int x, int y) {// Die regter pyltjie verhoog sy rotasie 5 gradosif (sleutel == GLUT_KEY_RIGHT) rotate_y + = 5 - // Die linker pyl: afneem rotasie in 5 gradoselse as ( sleutel == GLUT_KEY_LEFT) rotate_y - = 5-anders as (sleutel == GLUT_KEY_UP) rotate_x + = 5-anders as (sleutel == GLUT_KEY_DOWN) rotate_x - = 5 - // Versoek vir update pantallaglutPostRedisplay () -}

    2) glRotate ()

    • Die laaste instruksie sal wees om die lyne vir die voorwerp te voeg om te draai. Terug na die funksie vertoon () en voor VOORSIDE, voeg die onderstaande lyne toe:

      // Herstel die transformacionesglLoadIdentity () - // Draai wanneer die gebruiker die waardes van "rotate_x" en "rotate_y" .glRotatef (rotate_x, 1.0, 0.0, 0.0) -glRotatef (rotate_y, 0.0, 1.0, 0.0) verander - // Voorkant: veelkleurige kant.
    • Let op dat die sintaksis van glRotatef () Dit is soortgelyk aan glColor3f () en glVertex3f (), maar dit vereis altyd 4 parameters. Die eerste parameter is die rotasiegraad wat toegepas sal word en die ander drie parameters is die rotasie-asse X, Y en Z. Vir eers sal dit slegs nodig wees om op X en Y te draai.

    • Al die transformasies wat jy in die program skryf, benodig `n lyn soortgelyk aan hierdie. Konseptueel word dit beskou as hoe om die voorwerp op die X-as te roteer met die hoeveelheid gedefinieer deur "rotate_x" en draai dan op die Y-as deur "rotate_y". OpenGL kombineer egter al hierdie verklarings in `n matrikstransformasie. Elke keer as jy die "vertoon" -funksie noem, sal jy `n transformasiematriks bou glLoadIdentity () sal verseker dat jy met `n nuwe matriks in elke slaag begin.

    • Die ander transformasie funksies wat u kan toepas, is glTranslatef () en glScalef (). Hierdie funksies is soortgelyk aan glRotatef (), behalwe dat hulle slegs vir drie parameters vra, die hoeveelhede X, Y, Z om die voorwerp te skaal of te teken.

    • Om die gewenste effek te verkry wanneer u die drie transformasies op `n voorwerp toepas, sal dit nodig wees om dit in die korrekte volgorde toe te pas. Skryf hulle altyd in volgorde: glTranslate, glRotate, dan glScale. Wat in wese OpenGL sal doen, is om die transformasies van onder af aan te pas. Om te verwerk, dink die voorkoms van `n eenvoudige 1x1x1 kubus met OpenGL transformasies as die toepassing top-down en as ek gedoen het van onder na bo.

    • Voeg die volgende opdragte aan te trek skaal die kubus deur 2 in die X en Y-as roteer die middelpunt 180 grade op die Y-as, dan beweeg die middelpunt 0.1 op die X-as met die bevele glRotate () , seker wees om hulle in die korrekte volgorde hierbo beskryf (indien jy nie seker is, sal jy sien dit in die finale kode geleë aan die einde van hierdie handleiding gedoen) sit.

      // Ander transformacionesglTranslatef (0.1, 0.0, 0.0) -glRotatef (180, 0.0, 1.0, 0.0) -glScalef (2.0, 2.0, 0.0) -

    samestelling

    • Die laaste stap om jou eerste projek met OpenGL te voltooi, sal wees stel die kode op en voer dit uit. Veronderstel dat u `n gcc-samesteller tot u beskikking het, voer die volgende instruksies uit in `n terminaal om die program op te stel en te toets.

      Linux: gcc-o cube.c kubus -lglut -lGL./ micuboEn Mac: gcc-o cat foo.c -Framework GLUT -Framework OpenGL./ micuboEn Windows: gcc Wall -ofoo foo.c -lglut32cu -lglu32 - lopengl32./ micubo

    Deel 4
    Finale kode

    • Gereed, daar het jy jou eerste OpenGL-program! Hieronder is die bronkode vir u as referentie:

    //// Lêer: // micubo.c Author: Matthew Diaz // geskep: 2012/04/25 // Project: bronkode om `n kubus in OpenGL // Description maak: skep `n OpenGL venster en trek `n 3D kubus / / wat die gebruiker die pyltjie sleutels // // Beheer kan draai: linker pyl: draai links // pyltjie na regs: // draai regs pyltjie: roteer up // afpyltjie: draai down // ----------------------------------------------- ----------- / / Biblioteke / / ---------------------------------- # include # include # include ------------------------ # define __APPLE GL_GLEXT_PROTOTYPES #ifdef __ # include # include endif anders // ---- -------------------------------------------------- ---- / Funksie prototipes // --------------------------------------- ------------------- void display () - void specialKeys () - / / ------------------- --------------------------------------- / / Global variables // ----- -------------------------------------------------- --- dubbel rotate_y = 0-double rotate te_x = 0 - / / -------------------------------------------- -------------- // Callback funksie "display ()" / / ------------------------ ---------------------------------- void display () / / Helder skerm en Z-bufferglKlear (GL_COLOR_BUFFER_BIT // -------------------------------------------------- -------- / / Terugroep funksie "specialKeys ()" / / ------------------------------ ---------------------------- void specialKeys (int sleutel, int x, int y) {// Regs pyl: verhoog rotasie 5 grade (sleutel == GLUT_KEY_RIGHT) rotate_y + = 5 - // linker pyl 5 gradoselse rotasie afname as (sleutel == GLUT_KEY_LEFT) rotate_y - = 5-anders as (sleutel == GLUT_KEY_UP) rotate_x + = 5-anders as (key = = GLUT_KEY_DOWN) rotate_x - = 5 - // update Versoek visualizaciónglutPostRedisplay () -} // ------------------------------ ---------------------------- / / Function "main ()" / / ------------ ---------------------------------------------- int hoof (int argc, char * argv []) GLUT_RGB 
    Deel op sosiale netwerke:

    Verwante
    Hoe om `n pot by `n verduisteringsprojek (java) by te voegHoe om `n pot by `n verduisteringsprojek (java) by te voeg
    Hoe om DLL-lêers oop te maakHoe om DLL-lêers oop te maak
    Hoe om advertensies by jou Android-programme te voeg deur AdMob te gebruikHoe om advertensies by jou Android-programme te voeg deur AdMob te gebruik
    Hoe om `n programmeertaal te skepHoe om `n programmeertaal te skep
    Hoe om `n nuwe Java-projek in Eclipse te skepHoe om `n nuwe Java-projek in Eclipse te skep
    Hoe om `n eenvoudige program in C ++ te skepHoe om `n eenvoudige program in C ++ te skep
    Hoe om `n eenvoudige program in C te skepHoe om `n eenvoudige program in C te skep
    Hoe om standaardkode in C ++ te skryfHoe om standaardkode in C ++ te skryf
    Hoe om Firefox op Debian Linux te installeerHoe om Firefox op Debian Linux te installeer
    Hoe om Google Earth op Ubuntu Linux te installeerHoe om Google Earth op Ubuntu Linux te installeer
    » » Hoe om `n kubus in OpenGL te maak
    © 2024 dmylogi.com