170 likes | 323 Views
Module 02. Grafické primitíva a geometrické transformácie. Obsah. Typy grafických primitív Kreslenie primitív v OpenGL Pridávanie farby primitívam v OpenGL Základne geometrické transformácie v OpenGL Demonštračný program. Základné primitíva.
E N D
Module 02 Grafické primitíva a geometrické transformácie
Obsah • Typy grafických primitív • Kreslenie primitív v OpenGL • Pridávanie farby primitívam v OpenGL • Základne geometrické transformácie v OpenGL • Demonštračný program
Základné primitíva • Takmer všetky objekty v OpenGL sú reprezentované pomocou primitív (najčastejšie sapoužívajú trojuholníky) • Podporované primitíva sú:
Primitíva v OpenGL GL_POINTS GL_LINES GL_LINE_STRIP GL_LINE_LOOP GL_TRIANGLES GL_TRIANGLE_STRIP GL_TRIANGLE_LOOP GL_QUADS GL_QUAD_STRIP GL_POLYGON
Kreslenie primitív v OpenGL(1) • Na kreslenie objektov v OpenGL sa používa dvojica príkazov glBegin /glEnds parametrom typu primitíva v príkaze glBegin. • Medzi glBegin /glEndsa vkladajú informácie o geometrii , ktorú chceme vykresliť. • Tieto funkcie môžu byť použité pri popise geometrie: • glVertex - definuje vrchol • glColor - nastavenie farby vrcholu • glIndex - nastavenie indexu farby • glNormal - nastavenie normály • glEvalCoord - vyhodnoť, či je povolený daný typ textúrovania • glCallList - vykonaj display list • glCallLists - vykonaj zoznam display listov • glTexCoord - nastav textúrovacie koordináty • glEdgeFlag - príznak, či kreslený objekt je ohraničený alebo nie • glMaterial - špecifikuj materiál pre osvetľovací model
Kreslenie primitív v OpenGL(2) • Syntax kreslenia primitíva v OpenGL: glBegin(typ primitíva); … glVertexNT(x.xf, y.y f, z.zf);// koordináty primitíva … glEnd(); • Konvencia vytvárania názvov funkcii v OpenGL glVertexNT(x.xf, y.y f, z.zf);gl – gl knižnica Vertex – koreňový výraz pre zadanie koordinátov N – počet argumentov (2, 3, 4) T – typ argumentov (d, f, i, s) x.xf – x koordinát y.yf – y koordinát z.zf – z koordinát
Kreslenie primitív v OpenGL(3) Príklad: glBegin(GL_TRIANGLES);// Kreslenie trojuholníkov glVertex3f( 0.0f, 1.0f, 0.0f); // Vrchol trojuholníka glVertex3f(-1.0f, 0.0f, 0.0f); // Ľavý vrchol trojuholníka glVertex3f( 1.0f, 0.0f, 0.0f); // Pravý vrchol trojuholníka glEnd();// Ukonči kreslenie trojuholníka
Farby(1) • V OpenGL je popísaná farba pomocou RGB trojice. T.j. špecifikujeme množstvo červenej, zelenej a modrej farebnej zložky Aditívne miešanie týchto zložiek definuje výslednú farbu. Týmto spôsobom vieme vymiešať milióny farebných odtieňov. • Keďže farba je definovaná pomocou 3 kladných čísel. Je teda možne farbu reprezentovať ako objem kocky nazývanej model RGB.
Nastavenie farby primitívamv OpenGL (2) • Syntax pridelenia farby primitívam v OpenGL: glBegin( typ primitíva); … glColorNT(r.rf, g.gf, b.bf, alpha); // nastavenie farby pre nasledujúce primitíva glVertexNT(x.xf, y.y f, z.zf);// koordináty vrcholu … glEnd(); • Konvencia tvorby mien funkcii glColorNT(r.rf, g.gf, b.bf, alpha); gl – gl knižnica Color – koreňový výraz pre farbenie N – počet argumentov (3, 4) T – typ argumentov (b, d, f, i, s) r.rf – intenzita červenej farby v rozsahu <0.0 , 1.0> g.gf – intenzita zelenej farby v rozsahu <0.0 , 1.0> b.bf – intenzita modrej farby v rozsahu <0.0 , 1.0> alpha - alfa zložka indikujúca úroveň priehľadnosti. Len pri glColor4 funkcii
Nastavenie farby primitívamv OpenGL(3) Príklad: glBegin(GL_TRIANGLES); // Kresli trojuholník glColor3f(1.0f,0.0f,0.0f); // Nastav červenú farbu glVertex3f( 0.0f, 1.0f, 0.0f); // Zadaj horný vrchol trojuholníka glColor3f(0.0f,1.0f,0.0f); // Nastav zelenú farbu glVertex3f(-1.0f,-1.0f, 0.0f); // Zadaj ľavý vrchol trojuholníka glColor3f(0.0f,0.0f,1.0f); // Nastav modrú farbu glVertex3f( 1.0f,-1.0f, 0.0f); // Zadaj pravý vrchol trojuholníka glEnd(); // Ukonči kreslenie trojuholníkov
Transformácie v OpenGL • Transformácie sa používajú pri manipulácii s modelom reprezentujúcim konkrétny objekt. • Transformácie umožňujú pohybovať s objektom otáčať ho okolo osí a škálovať ho. Rotation Scaling Translation
Posúvanie objektov • Na posúvanie objektov sa v OpenGL používa: glTranslateT(X, Y,Z); • Konvencia tvorby mien funkcii glTranslateT(X, Y,Z); gl – gl knižnica Translate – koreňový názov pre funkciu posunutia T – typ argumentov (d, f) X – posun v X_ovom smere Y – posun v Y_ovom smere Z – posun v Z_ovom smere
Posúvanie objektov v OpenGL (2) Príklad: glLoadIdentity(); // Resetni aktuálnu modelovaciu maticu glTranslatef(-1.5f, 0.0f, -10.0f); // Posuň sa vľavo o 1.5 a do obrazovky 10.0 glBegin(GL_TRIANGLES); // Nastav kreslenie trojuholníkov glColor3f(1.0f,0.0f,0.0f); // Nastav červenú farbu glVertex3f( 0.0f, 1.0f, 0.0f); // Vykresli prvý vrchol glColor3f(0.0f,1.0f,0.0f); // Nastav zelenú farbu glVertex3f(-1.0f,-1.0f, 0.0f); // Vykresli druhý vrchol glColor3f(0.0f,0.0f,1.0f); // Nastav modrú farbu glVertex3f( 1.0f,-1.0f, 0.0f); // Vykresli tretí vrchol glEnd(); // ukonči kreslenie trojuholníkov
Škálovanie objektov v OpenGL (1) • Syntax škálovania objektov v OpenGL: glScaleT(X, Y,Z); • Konvencia tvorby mien funkcii glScaleT(X, Y,Z); gl – gl knižnica Scale – koreňový výraz pre škálovanie T – typy argumentov (d, f) X – zmena mierky v X_ovom smere Y – zmena mierky v Y_ovom smere Z – zmena mierky v Z_ovom smere
Škálovanie objektov v OpenGL(2) Príklad: glLoadIdentity(); // Resetni aktuálnu modelovaciu maticu glTranslatef(-1.5f,0.0f,-10.0f); // Posuň sa vľavo o 1.5 a do obrazovky 10.0 glScalef(2.0f, 1.0f, 0.0f) // Nastav nelineárne škálovanie glBegin(GL_TRIANGLES); // Vykresli trojuholník glVertex3f( 0.0f, 1.0f, 0.0f); // Prvý vrchol trojuholníka glVertex3f(-1.0f,-1.0f, 0.0f); // Druhý vrchol trojuholníka glVertex3f( 1.0f,-1.0f, 0.0f); // Tretí vrchol trojuholníka glEnd(); // Ukonči kreslenie trojuholníkov
Otočenie objektov v OpenGL (1) • Syntax otáčania objektov v OpenGL : glRotateT(angle, X, Y,Z) • Konvencia tvorby mien funkcií glRotateT(Angle, X vector,Y vector,Z vector); gl – gl knižnica Rotate – koreňový výraz pre funkciu otočenia T – typy argumentov (double , float) angle – uhol otočenia v stupňoch X – X_ový koordinát vektoru Y – Y_ový koordinát vektoru Z – Z_ový koordinát vektoru
Otočenie objektov v OpenGL(2) Príklad: glLoadIdentity(); // Resetni modelovaciu maticu glTranslatef(0.0f,0.0f,-10.0f); // Posuň sa do obrazovky o 10 glRotatef(rtri,0.0f,1.0f,0.0f); // Otoč sa okolo osy Y glBegin(GL_TRIANGLES); // Vykresli trojuholníky glColor3f(1.0f,0.0f,0.0f); // Nastav červenú farbu glVertex3f( 0.0f, 1.0f, 0.0f); // Nastav prvý vrchol glColor3f(0.0f,1.0f,0.0f); // Nastav zelenú farbu glVertex3f(-1.0f,-1.0f, 0.0f); // Nastav druhý vrchol glColor3f(0.0f,0.0f,1.0f); // Nastav modrú farbu glVertex3f( 1.0f,-1.0f, 0.0f); // Nastav tretí vrchol glEnd(); // ukončí kreslenie rtri+=0.2f; // Zväčši uhol otočenie pre nasledujúci snímok