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!
conținut
- Stappe
- Deel 1aanvanklike konfigurasie en hoof ()
- 1) installeer opengl
- 2) skep die dokument
- 3) biblioteke (# insluit)
- 4) funksie prototipes en globale veranderlikes
- 5) konfigureer die hoof () funksie
- Deel 2die "display ()" funksie
- 1) glclear () funksie
- Deel 3interaktiwiteit met die gebruiker
- 1) specialkeys () funksie
- 2) glrotate ()
- Samestelling
- Deel 4finale kode
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
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 die Qt SDK in Ubuntu Linux te installeer
- Hoe om `n pot by `n verduisteringsprojek (java) by te voeg
- Hoe om DLL-lêers oop te maak
- Hoe om advertensies by jou Android-programme te voeg deur AdMob te gebruik
- Hoe om `n programmeertaal te skep
- Hoe om `n nuwe Java-projek in Eclipse te skep
- Hoe om `n eenvoudige program in C ++ te skep
- Hoe om `n eenvoudige program in C te skep
- Hoe om standaardkode in C ++ te skryf
- Hoe om Firefox op Debian Linux te installeer
- Hoe om Google Earth op Ubuntu Linux te installeer
- Hoe Mesa (OpenGL) installeer in Linux Mint
- Hoe om `n ontwikkelingsomgewing vir JSP te maak met Eclipse, Tomcat en MySQL
- Hoe om te program met VBScript
- Hoe om in C te programmeer
- Hoe om sagteware te programmeer
- Hoe om VBA-kodes te beskerm
- Hoe om FFmpeg te gebruik
- Hoe toegang tot gedeelde biblioteke in iTunes verkry word
- Hoe om rekenaarspeletjies in 3D te skep
- Hoe om jou eerste Qt-program in Ubuntu Linux te skep