91
Vježbe Nela Bosner OpenGL Završni zadatak Vježbe kolegija Raˇ cunalna grafika Nela Bosner

Vježbe Nela Bosner OpenGL Završni Vježbe - Naslovnicanela/rgpredavanja/RG_vjezbe.pdf · Sintaksa OpenGL naredbi OpenGL zaglavlja GLUT naredbe Neke osnovne OpenGL naredbe Transformacije

  • Upload
    others

  • View
    12

  • Download
    0

Embed Size (px)

Citation preview

Page 1: Vježbe Nela Bosner OpenGL Završni Vježbe - Naslovnicanela/rgpredavanja/RG_vjezbe.pdf · Sintaksa OpenGL naredbi OpenGL zaglavlja GLUT naredbe Neke osnovne OpenGL naredbe Transformacije

Vježbe

Nela Bosner

OpenGL

Završnizadatak Vježbe

kolegija Racunalna grafika

Nela Bosner

Page 2: Vježbe Nela Bosner OpenGL Završni Vježbe - Naslovnicanela/rgpredavanja/RG_vjezbe.pdf · Sintaksa OpenGL naredbi OpenGL zaglavlja GLUT naredbe Neke osnovne OpenGL naredbe Transformacije

Vježbe

Nela Bosner

OpenGLSintaksa OpenGLnaredbi

OpenGL zaglavlja

GLUT naredbe

Neke osnovneOpenGL naredbe

Transformacijemodela i pogleda

Projekcije i volumenipogleda

Konike

Bézierove krivulje

B-splajnovi

Završnizadatak

OpenGL

OpenGL je software-sko sucelje za graficki hardware.Ovo sucelje se sastoji od 150 razlicitih naredbi kojeomogucuju specificiranje

objekataoperacija

za stvaranje interaktivne 3D aplikacije,dizajnirano je da bude neovisno o hardware-u,zbog toga ne sadrži naredbe za rad s prozorima ili unospodataka,niti omogucuje naredbe na visokom nivou za opisivanjemodela 3D objekata.Vodic za programiranje:

http://www.opengl.org/documentation/red_book/

Page 3: Vježbe Nela Bosner OpenGL Završni Vježbe - Naslovnicanela/rgpredavanja/RG_vjezbe.pdf · Sintaksa OpenGL naredbi OpenGL zaglavlja GLUT naredbe Neke osnovne OpenGL naredbe Transformacije

Vježbe

Nela Bosner

OpenGLSintaksa OpenGLnaredbi

OpenGL zaglavlja

GLUT naredbe

Neke osnovneOpenGL naredbe

Transformacijemodela i pogleda

Projekcije i volumenipogleda

Konike

Bézierove krivulje

B-splajnovi

Završnizadatak

Sa OpenGL-om korisnik mora sam napraviti svoj modeliz malog skupa geometrijskih primitiva: tocke, linije ipoligoni.Da bi se radili 3D modeli mora sa izgraditi sofisticiranabiblioteka koja koristi OpenGL kao temelj.OpenGL Utility (GLU) biblioteka omogucava mnogeznacajke modeliranja: razne krivulje i plohe,postavljanje matrica za projekcije i orijentaciju pogleda.GLU je standardni dio OpenGL implementacije.OpenGL Utility Toolkit (GLUT) je alat za kreiranje iupravljanje prozorima, i neovisan je o sistemu.GLUT nije dio OpenGL-a.

Page 4: Vježbe Nela Bosner OpenGL Završni Vježbe - Naslovnicanela/rgpredavanja/RG_vjezbe.pdf · Sintaksa OpenGL naredbi OpenGL zaglavlja GLUT naredbe Neke osnovne OpenGL naredbe Transformacije

Vježbe

Nela Bosner

OpenGLSintaksa OpenGLnaredbi

OpenGL zaglavlja

GLUT naredbe

Neke osnovneOpenGL naredbe

Transformacijemodela i pogleda

Projekcije i volumenipogleda

Konike

Bézierove krivulje

B-splajnovi

Završnizadatak

Što sve OpenGL radi:Konstruira oblike iz geometrijskih primitiva —matematicki opisi objekata.Rasporeduje objekte u 3D prostoru, i bira tockupogledaIzracunava boju svih objekata:

boja može biti eksplicitno postavljenamože biti odredena iz specificnih uvjeta osvjetljenjadobivena iz teksture zalijepljene na objektdobivena iz neke kombinacije gornjih postupaka

Prebacuje matematicke opise objekata i podatke onjihovim bojama u pixel-e na zaslonu — rasterizacija.

U toj fazi OpenGL može vršiti još neke operacije:eliminacija sakrivenih djelova objekata.

Page 5: Vježbe Nela Bosner OpenGL Završni Vježbe - Naslovnicanela/rgpredavanja/RG_vjezbe.pdf · Sintaksa OpenGL naredbi OpenGL zaglavlja GLUT naredbe Neke osnovne OpenGL naredbe Transformacije

Vježbe

Nela Bosner

OpenGLSintaksa OpenGLnaredbi

OpenGL zaglavlja

GLUT naredbe

Neke osnovneOpenGL naredbe

Transformacijemodela i pogleda

Projekcije i volumenipogleda

Konike

Bézierove krivulje

B-splajnovi

Završnizadatak

Sintaksa OpenGL naredbi

Prefiksi:gl — za OpenGLglu — za GLUglut — za GLUT

Sufiksi:1 broj argumenata2 tip podataka argumenata

Sufiks Tip podataka Tip C jezika Definicija tipa u OpenGL-ub 8-bit integer signed char GLbytes 16-bit integer short GLshorti 32-bit integer int ili long GLint, GLsizeif 32-bit floating-point float GLfloat, GLclampfd 64-bit floating-point double GLdouble, GLclampdub 8-bit unsigned integer unsigned char GLubyte, GLbooleanus 16-bit unsigned integer unsigned short GLushortui 32-bit unsigned integer unsigned int ili unsigned long GLuint, GLenum, GLbitfieldv pokazivac na polje

(vektor)

Page 6: Vježbe Nela Bosner OpenGL Završni Vježbe - Naslovnicanela/rgpredavanja/RG_vjezbe.pdf · Sintaksa OpenGL naredbi OpenGL zaglavlja GLUT naredbe Neke osnovne OpenGL naredbe Transformacije

Vježbe

Nela Bosner

OpenGLSintaksa OpenGLnaredbi

OpenGL zaglavlja

GLUT naredbe

Neke osnovneOpenGL naredbe

Transformacijemodela i pogleda

Projekcije i volumenipogleda

Konike

Bézierove krivulje

B-splajnovi

Završnizadatak

Primjer

Sljedece dvije naredbe su ekvivalentne:

glVertex2i(1, 3);glVertex2f(1.0, 3.0);

Vektorska i nevektorska verzija naredbe:

glColor3f(1.0, 0.0, 0.0);

GLfloat color_array[] = {1.0, 0.0, 0.0};glColor3fv(color_array);

Page 7: Vježbe Nela Bosner OpenGL Završni Vježbe - Naslovnicanela/rgpredavanja/RG_vjezbe.pdf · Sintaksa OpenGL naredbi OpenGL zaglavlja GLUT naredbe Neke osnovne OpenGL naredbe Transformacije

Vježbe

Nela Bosner

OpenGLSintaksa OpenGLnaredbi

OpenGL zaglavlja

GLUT naredbe

Neke osnovneOpenGL naredbe

Transformacijemodela i pogleda

Projekcije i volumenipogleda

Konike

Bézierove krivulje

B-splajnovi

Završnizadatak

OpenGL zaglavlja

Za korištenje OpenGL i GLU:#include <GL/gl.h>#include <GL/glu.h>

Za korištenje GLUT#include <GL/glut.h>

glut.h ukljucuje i gl.h i glu.h.

Page 8: Vježbe Nela Bosner OpenGL Završni Vježbe - Naslovnicanela/rgpredavanja/RG_vjezbe.pdf · Sintaksa OpenGL naredbi OpenGL zaglavlja GLUT naredbe Neke osnovne OpenGL naredbe Transformacije

Vježbe

Nela Bosner

OpenGLSintaksa OpenGLnaredbi

OpenGL zaglavlja

GLUT naredbe

Neke osnovneOpenGL naredbe

Transformacijemodela i pogleda

Projekcije i volumenipogleda

Konike

Bézierove krivulje

B-splajnovi

Završnizadatak

GLUT naredbe

Upravljanje prozorimaglutInit(int *argc, char **argv) —inicijalizira GLUT i obraduje argumente komandnelinije. glutInit() treba se pozvati prije bilo kojegGLUT potprograma.glutInitDisplayMode(unsigned int mode) —specificira korištenje RGBA ili color–index model boja.Takoder se može specificirati korištenje prozora sajednostrukim ili dvostrukim meduspremnikom (single-or double-buffered), ili korištenje još nekih drugihpridruženih meduspremnika (depth, stencil,accumulation buffer).glutInitWindowPosition(int x, int y) —specificira položaj gornjeg lijevog kuta prozora nazaslonu.

Page 9: Vježbe Nela Bosner OpenGL Završni Vježbe - Naslovnicanela/rgpredavanja/RG_vjezbe.pdf · Sintaksa OpenGL naredbi OpenGL zaglavlja GLUT naredbe Neke osnovne OpenGL naredbe Transformacije

Vježbe

Nela Bosner

OpenGLSintaksa OpenGLnaredbi

OpenGL zaglavlja

GLUT naredbe

Neke osnovneOpenGL naredbe

Transformacijemodela i pogleda

Projekcije i volumenipogleda

Konike

Bézierove krivulje

B-splajnovi

Završnizadatak

glutInitWindowSize(int width, int size)— specificira velicinu prozora izraženu u pixel-ima.int glutCreateWindow(char *string) — kreiraprozor s OpenGL kontekstom. Vraca jedinstveniidentifikator za novi prozor. Prozor nije prikazan dok sene pozove glutMainLoop().

Prikazivanje prozoraglutDisplayFunc(void (*func)(void)) —Kada god GLUT odredi da se sadržaj prozora moraponovo prikazati izvršava se callback funkcija koja jeulazni parametar potprograma glutDisplayFunc().Zato se sve naredbe za crtanje prozorskog sadržajamoraju nalaziti unutar callback funkcije.

Page 10: Vježbe Nela Bosner OpenGL Završni Vježbe - Naslovnicanela/rgpredavanja/RG_vjezbe.pdf · Sintaksa OpenGL naredbi OpenGL zaglavlja GLUT naredbe Neke osnovne OpenGL naredbe Transformacije

Vježbe

Nela Bosner

OpenGLSintaksa OpenGLnaredbi

OpenGL zaglavlja

GLUT naredbe

Neke osnovneOpenGL naredbe

Transformacijemodela i pogleda

Projekcije i volumenipogleda

Konike

Bézierove krivulje

B-splajnovi

Završnizadatak

Obrada ulaznih dogadajaglutReshapeFunc(void (*func)(int w, inth)) — naznacuje što se treba izvršiti kada se promijenivelicina prozora.glutKeyboardFunc(void (*func)(unsignedchar key, int x, int y)) iglutMouseFunc(void (*func)(int button,int state, int x, int y)) — odreduju koji sepotprogrami trebaju izvršiti kada se pritisne ili otpustitipka na tipkovnici ili mišu.glutMotionFunc(void (*func)(int x, inty)) — odreduje potprogram koji se izvršava kada semiš mice dok je pritisnuta tipka miša.

Page 11: Vježbe Nela Bosner OpenGL Završni Vježbe - Naslovnicanela/rgpredavanja/RG_vjezbe.pdf · Sintaksa OpenGL naredbi OpenGL zaglavlja GLUT naredbe Neke osnovne OpenGL naredbe Transformacije

Vježbe

Nela Bosner

OpenGLSintaksa OpenGLnaredbi

OpenGL zaglavlja

GLUT naredbe

Neke osnovneOpenGL naredbe

Transformacijemodela i pogleda

Projekcije i volumenipogleda

Konike

Bézierove krivulje

B-splajnovi

Završnizadatak

Izvršavanje programaglutMainLoop(void) — izvršava se kao zadnjanaredba; beskonacna petlja. Svi kreirani prozori seprikazuju, obraduju se dogadaji i registrirana callbackfunkcija za prikazivanje se izvršava.

Page 12: Vježbe Nela Bosner OpenGL Završni Vježbe - Naslovnicanela/rgpredavanja/RG_vjezbe.pdf · Sintaksa OpenGL naredbi OpenGL zaglavlja GLUT naredbe Neke osnovne OpenGL naredbe Transformacije

Vježbe

Nela Bosner

OpenGLSintaksa OpenGLnaredbi

OpenGL zaglavlja

GLUT naredbe

Neke osnovneOpenGL naredbe

Transformacijemodela i pogleda

Projekcije i volumenipogleda

Konike

Bézierove krivulje

B-splajnovi

Završnizadatak

Neke osnovne OpenGL naredbe

Brisanje prozoraPrije crtanja prozorskog sadržaja potrebno je izbrisatimemoriju prozora od zadnje nacrtane slike, i postaviti ju naneku pozadinsku boju.

void glClearColor(GLclampf red, GLclampfgreen, GLclampf blue, GLclampf alpha) —Postavlja boju pozadine u RGBA modu. Vrijednostiboja su ogranicene na [0,1]. Default vrijednost je(0,0,0,0) tj. crna.void glClear(GLbitfield mask) — briše zadanimeduspremnik i postavlja zadanu boju pozadine. Micemo koristiti meduspremnik za bojeGL_COLOR_BUFFER_BIT.

Page 13: Vježbe Nela Bosner OpenGL Završni Vježbe - Naslovnicanela/rgpredavanja/RG_vjezbe.pdf · Sintaksa OpenGL naredbi OpenGL zaglavlja GLUT naredbe Neke osnovne OpenGL naredbe Transformacije

Vježbe

Nela Bosner

OpenGLSintaksa OpenGLnaredbi

OpenGL zaglavlja

GLUT naredbe

Neke osnovneOpenGL naredbe

Transformacijemodela i pogleda

Projekcije i volumenipogleda

Konike

Bézierove krivulje

B-splajnovi

Završnizadatak

PrimjerBrisanje prozora i postavljanje boje pozadine na crno:

glClearColor(0.0, 0.0, 0.0, 0.0);glClear(GL_COLOR_BUFFER_BIT);

Page 14: Vježbe Nela Bosner OpenGL Završni Vježbe - Naslovnicanela/rgpredavanja/RG_vjezbe.pdf · Sintaksa OpenGL naredbi OpenGL zaglavlja GLUT naredbe Neke osnovne OpenGL naredbe Transformacije

Vježbe

Nela Bosner

OpenGLSintaksa OpenGLnaredbi

OpenGL zaglavlja

GLUT naredbe

Neke osnovneOpenGL naredbe

Transformacijemodela i pogleda

Projekcije i volumenipogleda

Konike

Bézierove krivulje

B-splajnovi

Završnizadatak

Specificiranje tekuce bojeDok se boja ne promijeni, svi se objekti crtaju tekucombojom.

void glColor3{b s i f d ub us ui}(TYPEr, TYPEg, TYPEb)

void glColor4{b s i f d ub us ui}(TYPEr, TYPEg, TYPEb, TYPEa)

void glColor3{b s i f d ub us ui}v(const TYPE*v)

void glColor4{b s i f d ub us ui}v(const TYPE*v)

— Postavlja tekuce vrijednosti za crvenu, zelenu, plavu i α

Page 15: Vježbe Nela Bosner OpenGL Završni Vježbe - Naslovnicanela/rgpredavanja/RG_vjezbe.pdf · Sintaksa OpenGL naredbi OpenGL zaglavlja GLUT naredbe Neke osnovne OpenGL naredbe Transformacije

Vježbe

Nela Bosner

OpenGLSintaksa OpenGLnaredbi

OpenGL zaglavlja

GLUT naredbe

Neke osnovneOpenGL naredbe

Transformacijemodela i pogleda

Projekcije i volumenipogleda

Konike

Bézierove krivulje

B-splajnovi

Završnizadatak

prvi sufiks je 3 ili 4, ovisno da li se uz RGB vrijednostipostavlja i α vrijednost (prozirnost materijala). Za sufiks3, α = 0.drugi sufiks odreduje tip podataka ulaznih parametara:byte, short, integer, float, double, unsigned byte,unsigned short, ili unsigned integertreci sufiks v je neobavezan i oznacava vektorskuverziju naredbeulazni parametri su najcešce tipovi pomicnog zareza, ioni su ograniceni na [0,1]; ostali tipovi se linearnokonvertiraju na zadani raspon ([0,1] za unsigned ili[−1,1] za ostale).

Page 16: Vježbe Nela Bosner OpenGL Završni Vježbe - Naslovnicanela/rgpredavanja/RG_vjezbe.pdf · Sintaksa OpenGL naredbi OpenGL zaglavlja GLUT naredbe Neke osnovne OpenGL naredbe Transformacije

Vježbe

Nela Bosner

OpenGLSintaksa OpenGLnaredbi

OpenGL zaglavlja

GLUT naredbe

Neke osnovneOpenGL naredbe

Transformacijemodela i pogleda

Projekcije i volumenipogleda

Konike

Bézierove krivulje

B-splajnovi

Završnizadatak

Prinudno dovršenje crtanjaKoristi se kada

software za renderiranje ne obnavlja zaslonkontinuiranoimplementacije grafike sakupljaju odredeni niz naredbiza renderiranje prije prikazivanja

void glFlush(void) — prethodno izdane OpenGLnaredbe prinudno zapocinju s izvršavanjem,osiguravajuci njihovo dovršenje u konacnom vremenu.

Page 17: Vježbe Nela Bosner OpenGL Završni Vježbe - Naslovnicanela/rgpredavanja/RG_vjezbe.pdf · Sintaksa OpenGL naredbi OpenGL zaglavlja GLUT naredbe Neke osnovne OpenGL naredbe Transformacije

Vježbe

Nela Bosner

OpenGLSintaksa OpenGLnaredbi

OpenGL zaglavlja

GLUT naredbe

Neke osnovneOpenGL naredbe

Transformacijemodela i pogleda

Projekcije i volumenipogleda

Konike

Bézierove krivulje

B-splajnovi

Završnizadatak

Odredivanje koordinatnog sustava u prozoruKada god se inicijalno otvori prozor ili se promijene njegovavelicina, prozorski sustav šalje obavijest o dogadaju.

GLUT automatski obavještava o dogadaju vezanim uzprozorpoziva se callback funkcija registrirana saglutReshapeFunc()

callback funkcija moraustanoviti novo pravokutno podrucje za crtanjedefinirati koordinatni sustav za crtanje

Za kreiranje jednostavnog 2D koordinatnog sustava trebapozvati

glutReshapeFunc(reshape);

gdje je reshape() prikazana u sljedecem primjeru.

Page 18: Vježbe Nela Bosner OpenGL Završni Vježbe - Naslovnicanela/rgpredavanja/RG_vjezbe.pdf · Sintaksa OpenGL naredbi OpenGL zaglavlja GLUT naredbe Neke osnovne OpenGL naredbe Transformacije

Vježbe

Nela Bosner

OpenGLSintaksa OpenGLnaredbi

OpenGL zaglavlja

GLUT naredbe

Neke osnovneOpenGL naredbe

Transformacijemodela i pogleda

Projekcije i volumenipogleda

Konike

Bézierove krivulje

B-splajnovi

Završnizadatak

PrimjerCallback funkcija reshape():

void reshape (int w, int h){

glViewport (0, 0, (GLsizei) w, (GLsizei) h);glMatrixMode (GL_PROJECTION);glLoadIdentity ();gluOrtho2D (0.0, (GLdouble) w, 0.0, (GLdouble) h);

}

GLUT predaje funkciji reshape() dva argumenta;širinu i visinu prozora u pixel-ima.glViewport() odreduje da ce cijeli prozor bitipredviden za crtanje.

Page 19: Vježbe Nela Bosner OpenGL Završni Vježbe - Naslovnicanela/rgpredavanja/RG_vjezbe.pdf · Sintaksa OpenGL naredbi OpenGL zaglavlja GLUT naredbe Neke osnovne OpenGL naredbe Transformacije

Vježbe

Nela Bosner

OpenGLSintaksa OpenGLnaredbi

OpenGL zaglavlja

GLUT naredbe

Neke osnovneOpenGL naredbe

Transformacijemodela i pogleda

Projekcije i volumenipogleda

Konike

Bézierove krivulje

B-splajnovi

Završnizadatak

Primjer (nastavak)

Sljedeca tri potprograma podešavaju koordinatni sustavza crtanje tako da donji lijevi kut ima koordinate (0,0), adesni gornji kut (w,h).gluOrtho2D() postavlja ishodište u donji lijevi kut ipostavlja jedinicni kvadrat.

Slika: Koordinatni sustav definiran sa w = 50, h = 50.

Page 20: Vježbe Nela Bosner OpenGL Završni Vježbe - Naslovnicanela/rgpredavanja/RG_vjezbe.pdf · Sintaksa OpenGL naredbi OpenGL zaglavlja GLUT naredbe Neke osnovne OpenGL naredbe Transformacije

Vježbe

Nela Bosner

OpenGLSintaksa OpenGLnaredbi

OpenGL zaglavlja

GLUT naredbe

Neke osnovneOpenGL naredbe

Transformacijemodela i pogleda

Projekcije i volumenipogleda

Konike

Bézierove krivulje

B-splajnovi

Završnizadatak

void glViewport(GLint x, GLint y,GLsizei width, GLsizei height) — definirapravokutnik pixel-a unutar prozora u koji ce se preslikatikonacna slika:

(x,y) parametri specificiraju koordinate donjeg lijevogkuta pravokutnika pogleda (viewport)width i height specificiraju širinu i visinu pravokutnikapogleda

Default vrijednosti pogleda su (0, 0, winWidth,winHeight), gdje winWidth i winHeight definirajuvelicinu prozora.void glMatrixMode(GLenum mode) — specificirada li ce se mijenjati matrica model–pogleda, projekcije,ili teksture, koristeci argumente GL_MODELVIEW,GL_PROJECTION, ili GL_TEXTURE.

Transformacije koje slijede djeluju samo naspecificiranu matricu (kompozicija preslikavanja).Defaultna vrijednost je identiteta za sve tri matrice.

Page 21: Vježbe Nela Bosner OpenGL Završni Vježbe - Naslovnicanela/rgpredavanja/RG_vjezbe.pdf · Sintaksa OpenGL naredbi OpenGL zaglavlja GLUT naredbe Neke osnovne OpenGL naredbe Transformacije

Vježbe

Nela Bosner

OpenGLSintaksa OpenGLnaredbi

OpenGL zaglavlja

GLUT naredbe

Neke osnovneOpenGL naredbe

Transformacijemodela i pogleda

Projekcije i volumenipogleda

Konike

Bézierove krivulje

B-splajnovi

Završnizadatak

void glLoadIdentity(void) — tekucumijenjajucu matricu postavlja na 4× 4 identitetu; tekucamatrica se briše i priprema se za buducetransformacije.void glOrtho(GLdouble left, GLdoubleright, GLdouble bottom, GLdouble top,GLdouble near, GLdouble far) — kreira matricuza ortografski paralelni volumen pogleda, i množitekucu matricu s njom. Volumen pogleda je kvadar

(left, bottom, -near) i (right, top,-near) su tocke prednje ravnine za obrezivanje, kojese redom preslikavaju u donji lijevi kut i gornji desni kutotvora pogleda.(left, bottom, -far) i (right, top, -far)su tocke stražnje ravnine za obrezivanje, koje sepreslikavaju u iste tocke.Smjer projekcije je paralelan z osi, a pogled je usmjerenprema negativnoj z osi.

Page 22: Vježbe Nela Bosner OpenGL Završni Vježbe - Naslovnicanela/rgpredavanja/RG_vjezbe.pdf · Sintaksa OpenGL naredbi OpenGL zaglavlja GLUT naredbe Neke osnovne OpenGL naredbe Transformacije

Vježbe

Nela Bosner

OpenGLSintaksa OpenGLnaredbi

OpenGL zaglavlja

GLUT naredbe

Neke osnovneOpenGL naredbe

Transformacijemodela i pogleda

Projekcije i volumenipogleda

Konike

Bézierove krivulje

B-splajnovi

Završnizadatak

Slika: Volumen pogleda ortografske projekcije.

Page 23: Vježbe Nela Bosner OpenGL Završni Vježbe - Naslovnicanela/rgpredavanja/RG_vjezbe.pdf · Sintaksa OpenGL naredbi OpenGL zaglavlja GLUT naredbe Neke osnovne OpenGL naredbe Transformacije

Vježbe

Nela Bosner

OpenGLSintaksa OpenGLnaredbi

OpenGL zaglavlja

GLUT naredbe

Neke osnovneOpenGL naredbe

Transformacijemodela i pogleda

Projekcije i volumenipogleda

Konike

Bézierove krivulje

B-splajnovi

Završnizadatak

void gluOrtho2D(GLdouble left, GLdoubleright, GLdouble bottom, GLdouble top) —kreira matricu za projekciju 2D koordinata na zaslon imnoži tekucu matricu s njom.

Podrucje obrezivanja je pravokutnik sa donjim lijevimkutom u (left, bottom) i gornjim desnim kutom u(right, top).Ovaj potprogram je identican 3D verziji glOrtho(),samo što se pretpostavlja da su z koordinate svihobjekata na slici iz [−1,1].Kod crtanja 2D objekata korištenjem 2D naredbi zacrtanje, sve z koordinate su jednake 0.

Page 24: Vježbe Nela Bosner OpenGL Završni Vježbe - Naslovnicanela/rgpredavanja/RG_vjezbe.pdf · Sintaksa OpenGL naredbi OpenGL zaglavlja GLUT naredbe Neke osnovne OpenGL naredbe Transformacije

Vježbe

Nela Bosner

OpenGLSintaksa OpenGLnaredbi

OpenGL zaglavlja

GLUT naredbe

Neke osnovneOpenGL naredbe

Transformacijemodela i pogleda

Projekcije i volumenipogleda

Konike

Bézierove krivulje

B-splajnovi

Završnizadatak

Crtanje geometrijskih primitiva: tocke, linije i poligoniKod OpenGL-a svi geometrijski objekti su opisani kaouredeni skup vrhova.

void glVertex{234}{sifd}[v](TYPEcoords)— definira vrh za korištenje kod opisivanjageometrijskog objekta.

Mogu se navesti (x, y), (x, y, z) ili (x, y, z,w) koordinate, ovisno o verziji naredbe.Verzije bez z ili w koordinate imaju default vrijednostiz = 0 i w = 1.Pozivi glVertex*() imaju efekta jedino unutar paranaredbi glBegin() i glEnd().

void glBegin(GLenum mode) — oznacava pocetakliste vrhova koji opisuju geometrijsku primitivu. Tipprimitive je odreden parametrom mode.void glEnd(void) — oznacava kraj liste vrhova.

Page 25: Vježbe Nela Bosner OpenGL Završni Vježbe - Naslovnicanela/rgpredavanja/RG_vjezbe.pdf · Sintaksa OpenGL naredbi OpenGL zaglavlja GLUT naredbe Neke osnovne OpenGL naredbe Transformacije

Vježbe

Nela Bosner

OpenGLSintaksa OpenGLnaredbi

OpenGL zaglavlja

GLUT naredbe

Neke osnovneOpenGL naredbe

Transformacijemodela i pogleda

Projekcije i volumenipogleda

Konike

Bézierove krivulje

B-splajnovi

Završnizadatak

Dopuštene vrijednosti parametra mode i geometrijskeprimitive:

Vrijednost ZnacenjeGL_POINTS individualne tockeGL_LINES parovi vrhova inerpretiraju se kao individualni

segmenti linijaGL_LINE_STRIP niz povezanih segmenata linijaGL_LINE_LOOP isto kao i GL_LINE_STRIP, sa dodanim

segmentom izmedu zadnjeg i prvog vrhaGL_TRIANGLES po tri vrha interpretiraju se kao individualni

trokutiGL_TRIANGLE_STRIP traka povezanih trokutaGL_TRIANGLE_FAN lepeza povezanih trokutaGL_QUADS po cetiri vrha interpretiraju se kao individualni

cetverkutiGL_QUAD_STRIP traka povezanih cetverokutaGL_POLYGON rub jednostavnog, konveksnog poligona

Page 26: Vježbe Nela Bosner OpenGL Završni Vježbe - Naslovnicanela/rgpredavanja/RG_vjezbe.pdf · Sintaksa OpenGL naredbi OpenGL zaglavlja GLUT naredbe Neke osnovne OpenGL naredbe Transformacije

Vježbe

Nela Bosner

OpenGLSintaksa OpenGLnaredbi

OpenGL zaglavlja

GLUT naredbe

Neke osnovneOpenGL naredbe

Transformacijemodela i pogleda

Projekcije i volumenipogleda

Konike

Bézierove krivulje

B-splajnovi

Završnizadatak

Slika: Tipovi geometrijskih primitiva.

Page 27: Vježbe Nela Bosner OpenGL Završni Vježbe - Naslovnicanela/rgpredavanja/RG_vjezbe.pdf · Sintaksa OpenGL naredbi OpenGL zaglavlja GLUT naredbe Neke osnovne OpenGL naredbe Transformacije

Vježbe

Nela Bosner

OpenGLSintaksa OpenGLnaredbi

OpenGL zaglavlja

GLUT naredbe

Neke osnovneOpenGL naredbe

Transformacijemodela i pogleda

Projekcije i volumenipogleda

Konike

Bézierove krivulje

B-splajnovi

Završnizadatak

void glRect{sifd}(TYPEx1, TYPEy1,TYPEx2, TYPEy2)

void glRect{sifd}v(TYPE*v1, TYPE*v2) —crtaju pravokutnike definirane vrhovima (x1, y1) i (x2,y2).

Pravokutnik leži u ravnini z = 0, i stranice su muparalelne x i y osima.Kod vektorske verzije potprograma vrhovi su zadanipomocu dva pokazivaca na polja, a svako polje sadržipar (x, y).

Page 28: Vježbe Nela Bosner OpenGL Završni Vježbe - Naslovnicanela/rgpredavanja/RG_vjezbe.pdf · Sintaksa OpenGL naredbi OpenGL zaglavlja GLUT naredbe Neke osnovne OpenGL naredbe Transformacije

Vježbe

Nela Bosner

OpenGLSintaksa OpenGLnaredbi

OpenGL zaglavlja

GLUT naredbe

Neke osnovneOpenGL naredbe

Transformacijemodela i pogleda

Projekcije i volumenipogleda

Konike

Bézierove krivulje

B-splajnovi

Završnizadatak

PrimjerIspunjeni poligon:

glBegin(GL_POLYGON);glVertex2f(0.0, 0.0);glVertex2f(0.0, 3.0);glVertex2f(4.0, 3.0);glVertex2f(6.0, 1.5);glVertex2f(4.0, 0.0);

glEnd();

Page 29: Vježbe Nela Bosner OpenGL Završni Vježbe - Naslovnicanela/rgpredavanja/RG_vjezbe.pdf · Sintaksa OpenGL naredbi OpenGL zaglavlja GLUT naredbe Neke osnovne OpenGL naredbe Transformacije

Vježbe

Nela Bosner

OpenGLSintaksa OpenGLnaredbi

OpenGL zaglavlja

GLUT naredbe

Neke osnovneOpenGL naredbe

Transformacijemodela i pogleda

Projekcije i volumenipogleda

Konike

Bézierove krivulje

B-splajnovi

Završnizadatak

Primjer

Neefikasan nacin crtanja kružnice:

#define PI 3.1415926535898GLint circle_points = 100;glBegin(GL_LINE_LOOP);for (i = 0; i < circle_points; i++) {

angle = 2*PI*i/circle_points;glVertex2f(cos(angle), sin(angle));

}glEnd();

Page 30: Vježbe Nela Bosner OpenGL Završni Vježbe - Naslovnicanela/rgpredavanja/RG_vjezbe.pdf · Sintaksa OpenGL naredbi OpenGL zaglavlja GLUT naredbe Neke osnovne OpenGL naredbe Transformacije

Vježbe

Nela Bosner

OpenGLSintaksa OpenGLnaredbi

OpenGL zaglavlja

GLUT naredbe

Neke osnovneOpenGL naredbe

Transformacijemodela i pogleda

Projekcije i volumenipogleda

Konike

Bézierove krivulje

B-splajnovi

Završnizadatak

PrimjerSuvišno definiranje boje:

glBegin(GL_POINTS);glColor3f(0.0, 1.0, 0.0); /* zelena */glColor3f(1.0, 0.0, 0.0); /* crvena */glVertex(...);glColor3f(1.0, 1.0, 0.0); /* žuta */glColor3f(0.0, 0.0, 1.0); /* plava */glVertex(...);glVertex(...);

glEnd();

Page 31: Vježbe Nela Bosner OpenGL Završni Vježbe - Naslovnicanela/rgpredavanja/RG_vjezbe.pdf · Sintaksa OpenGL naredbi OpenGL zaglavlja GLUT naredbe Neke osnovne OpenGL naredbe Transformacije

Vježbe

Nela Bosner

OpenGLSintaksa OpenGLnaredbi

OpenGL zaglavlja

GLUT naredbe

Neke osnovneOpenGL naredbe

Transformacijemodela i pogleda

Projekcije i volumenipogleda

Konike

Bézierove krivulje

B-splajnovi

Završnizadatak

Primjer (hello.c)#include <GL/gl.h>#include <GL/glut.h>

void display(void){/* clear all pixels */

glClear (GL_COLOR_BUFFER_BIT);

/* draw white polygon (rectangle) with corners at

* (0.25, 0.25, 0.0) and (0.75, 0.75, 0.0)

*/glColor3f (1.0, 1.0, 1.0);glBegin(GL_POLYGON);

glVertex3f (0.25, 0.25, 0.0);glVertex3f (0.75, 0.25, 0.0);glVertex3f (0.75, 0.75, 0.0);glVertex3f (0.25, 0.75, 0.0);

glEnd();

/* don’t wait!

* start processing buffered OpenGL routines

*/glFlush ();

}

Page 32: Vježbe Nela Bosner OpenGL Završni Vježbe - Naslovnicanela/rgpredavanja/RG_vjezbe.pdf · Sintaksa OpenGL naredbi OpenGL zaglavlja GLUT naredbe Neke osnovne OpenGL naredbe Transformacije

Vježbe

Nela Bosner

OpenGLSintaksa OpenGLnaredbi

OpenGL zaglavlja

GLUT naredbe

Neke osnovneOpenGL naredbe

Transformacijemodela i pogleda

Projekcije i volumenipogleda

Konike

Bézierove krivulje

B-splajnovi

Završnizadatak

Primjer (hello.c — nastavak)void init (void){/* select clearing (background) color */

glClearColor (0.0, 0.0, 0.0, 0.0);

/* initialize viewing values */glMatrixMode(GL_PROJECTION);glLoadIdentity();glOrtho(0.0, 1.0, 0.0, 1.0, -1.0, 1.0);

}

/* * Declare initial window size, position, and display mode

* (single buffer and RGBA). Open window with "hello"

* in its title bar. Call initialization routines.

* Register callback function to display graphics.

* Enter main loop and process events.

*/int main(int argc, char** argv){

glutInit(&argc, argv);glutInitDisplayMode (GLUT_SINGLE | GLUT_RGB);glutInitWindowSize (250, 250);glutInitWindowPosition (100, 100);glutCreateWindow ("hello");init ();glutDisplayFunc(display);glutMainLoop();return 0; /* ISO C requires main to return int. */

}

Page 33: Vježbe Nela Bosner OpenGL Završni Vježbe - Naslovnicanela/rgpredavanja/RG_vjezbe.pdf · Sintaksa OpenGL naredbi OpenGL zaglavlja GLUT naredbe Neke osnovne OpenGL naredbe Transformacije

Vježbe

Nela Bosner

OpenGLSintaksa OpenGLnaredbi

OpenGL zaglavlja

GLUT naredbe

Neke osnovneOpenGL naredbe

Transformacijemodela i pogleda

Projekcije i volumenipogleda

Konike

Bézierove krivulje

B-splajnovi

Završnizadatak

Slika: Grafika programa hello.c.

Page 34: Vježbe Nela Bosner OpenGL Završni Vježbe - Naslovnicanela/rgpredavanja/RG_vjezbe.pdf · Sintaksa OpenGL naredbi OpenGL zaglavlja GLUT naredbe Neke osnovne OpenGL naredbe Transformacije

Vježbe

Nela Bosner

OpenGLSintaksa OpenGLnaredbi

OpenGL zaglavlja

GLUT naredbe

Neke osnovneOpenGL naredbe

Transformacijemodela i pogleda

Projekcije i volumenipogleda

Konike

Bézierove krivulje

B-splajnovi

Završnizadatak

Primjer (hello.c — nastavak)Program se kompajlira sa

$ gcc hello.c -lglut

Page 35: Vježbe Nela Bosner OpenGL Završni Vježbe - Naslovnicanela/rgpredavanja/RG_vjezbe.pdf · Sintaksa OpenGL naredbi OpenGL zaglavlja GLUT naredbe Neke osnovne OpenGL naredbe Transformacije

Vježbe

Nela Bosner

OpenGLSintaksa OpenGLnaredbi

OpenGL zaglavlja

GLUT naredbe

Neke osnovneOpenGL naredbe

Transformacijemodela i pogleda

Projekcije i volumenipogleda

Konike

Bézierove krivulje

B-splajnovi

Završnizadatak

ZadatakNapišite algoritam srednje tocke za scan converting linijekoji obraduje linije sa svim mogucim koeficijentima smjera.

Domaca zadacaNapišite program koji ucitava koordinate n tocaka, te xmin,xmax , ymin i ymax koordinate pravokutnika za obrezivanje.Program treba nacrtati poligon zadan tim tockama pomocualgoritma srednje tocke za linije, koji je pravilno obrezanzadanim pravokutnikom za obrezivanje.

Page 36: Vježbe Nela Bosner OpenGL Završni Vježbe - Naslovnicanela/rgpredavanja/RG_vjezbe.pdf · Sintaksa OpenGL naredbi OpenGL zaglavlja GLUT naredbe Neke osnovne OpenGL naredbe Transformacije

Vježbe

Nela Bosner

OpenGLSintaksa OpenGLnaredbi

OpenGL zaglavlja

GLUT naredbe

Neke osnovneOpenGL naredbe

Transformacijemodela i pogleda

Projekcije i volumenipogleda

Konike

Bézierove krivulje

B-splajnovi

Završnizadatak

Transformacije modela i pogleda

Transformacije modela služe za smještaj i orijentacijumodela.Transformacije pogleda su analogne smještaju iorijentaciji kamere.Buduci da je bitan relativan položaj modela ili objekta uodnosu na kameru

svejedno je da li micemo kameru u jednom smjeru, iliobjekt u suprotnom smjerumoramo simultano razmatrati efekte obiju transformacija

Za definiranje transformacija modela–pogleda trebapozvati

glMatrixMode (GL_MODELVIEW);glLoadIdentity();

što je i default vrijednost.

Page 37: Vježbe Nela Bosner OpenGL Završni Vježbe - Naslovnicanela/rgpredavanja/RG_vjezbe.pdf · Sintaksa OpenGL naredbi OpenGL zaglavlja GLUT naredbe Neke osnovne OpenGL naredbe Transformacije

Vježbe

Nela Bosner

OpenGLSintaksa OpenGLnaredbi

OpenGL zaglavlja

GLUT naredbe

Neke osnovneOpenGL naredbe

Transformacijemodela i pogleda

Projekcije i volumenipogleda

Konike

Bézierove krivulje

B-splajnovi

Završnizadatak

Osnovne naredbe za definiranje 4× 4 matricetransformacija su glLoadMatrix*() iglMultMatrix*()

void glLoadMatrix{fd}(const TYPE *m) —postavlja 16 vrijednosti tekuce matrice na vrijednostispecificirane u 4× 4 matrici m. Matrica je zadana sa

M =

m1 m5 m9 m13m2 m6 m10 m14m3 m7 m11 m15m4 m8 m12 m16

Matrica se sprema po stupcima, pa je pogodnijedeklarirati matricu kao m[16].void glMultMatrix{fd}(const TYPE *m) —Množi matricu na cije elemente pokazuje pokazivac msa tekucom matricom, i sprema rezultat kao tekucumatricu.

Page 38: Vježbe Nela Bosner OpenGL Završni Vježbe - Naslovnicanela/rgpredavanja/RG_vjezbe.pdf · Sintaksa OpenGL naredbi OpenGL zaglavlja GLUT naredbe Neke osnovne OpenGL naredbe Transformacije

Vježbe

Nela Bosner

OpenGLSintaksa OpenGLnaredbi

OpenGL zaglavlja

GLUT naredbe

Neke osnovneOpenGL naredbe

Transformacijemodela i pogleda

Projekcije i volumenipogleda

Konike

Bézierove krivulje

B-splajnovi

Završnizadatak

Sva matricna množenja se izvode s desna:tekuca matrica je Cmatrica definirana sa glMultMatrix*() ili bilo kojomnaredbom za transformacije je Mrezultat množenja je CM

Buduci da množenje matrica nije komutativno,redoslijed je važan.Vrhovi v se množe tekucom matricommodela–pogleda: CMvZadnja naredba za transformaciju u programu se prvaprimijenjuje na vrhove.Transformacije se moraju specificirati u obrnutomporetku (ili u poretku transformacija koordinatnogsustava).

Page 39: Vježbe Nela Bosner OpenGL Završni Vježbe - Naslovnicanela/rgpredavanja/RG_vjezbe.pdf · Sintaksa OpenGL naredbi OpenGL zaglavlja GLUT naredbe Neke osnovne OpenGL naredbe Transformacije

Vježbe

Nela Bosner

OpenGLSintaksa OpenGLnaredbi

OpenGL zaglavlja

GLUT naredbe

Neke osnovneOpenGL naredbe

Transformacijemodela i pogleda

Projekcije i volumenipogleda

Konike

Bézierove krivulje

B-splajnovi

Završnizadatak

Primjer

Crta jednu tocku koristeci tri transformacije

glMatrixMode(GL_MODELVIEW);glLoadIdentity();glMultMatrixf(N); /* primijenjuje transformaciju N */glMultMatrixf(M); /* primijenjuje transformaciju M */glMultMatrixf(L); /* primijenjuje transformaciju L */glBegin(GL_POINTS);glVertex3f(v); /* crta transformirani vrh v */glEnd();

Matrica modela–pogleda uzastopno sadrži: I, N, NM, iNMLTransformirani vrh je: NMLvRed transformacija je: L, M, i N

Page 40: Vježbe Nela Bosner OpenGL Završni Vježbe - Naslovnicanela/rgpredavanja/RG_vjezbe.pdf · Sintaksa OpenGL naredbi OpenGL zaglavlja GLUT naredbe Neke osnovne OpenGL naredbe Transformacije

Vježbe

Nela Bosner

OpenGLSintaksa OpenGLnaredbi

OpenGL zaglavlja

GLUT naredbe

Neke osnovneOpenGL naredbe

Transformacijemodela i pogleda

Projekcije i volumenipogleda

Konike

Bézierove krivulje

B-splajnovi

Završnizadatak

Transformacije modelavoid glTranslate{fd}(TYPE x, TYPE y,TYPE z) — množi tekucu matricu matricom translacijeT (x , y , z) (ili pomice lokalni koordinatni sustav za danivektor).void glRotate{fd}(TYPE theta, TYPE x,TYPE y, TYPE z) — množi tekucu matricu matricomrotacije Ru(θ), pri cemu Ru(θ) rotira objekt (ili njegovlokalni koordinatni sustav) u smjeru suprotnom odkazaljke na satu oko zrake iz ishodišta u smjeru vektorau = (x , y , z), za kut θ izražen u stupnjevima.void glScale{fd}(TYPE x, TYPE y, TYPE z)— množi tekucu matricu matricom skaliranja S(x , y , z)(ili rasteže, skuplja, ili reflektira lokalni koordinatnisustav).

Page 41: Vježbe Nela Bosner OpenGL Završni Vježbe - Naslovnicanela/rgpredavanja/RG_vjezbe.pdf · Sintaksa OpenGL naredbi OpenGL zaglavlja GLUT naredbe Neke osnovne OpenGL naredbe Transformacije

Vježbe

Nela Bosner

OpenGLSintaksa OpenGLnaredbi

OpenGL zaglavlja

GLUT naredbe

Neke osnovneOpenGL naredbe

Transformacijemodela i pogleda

Projekcije i volumenipogleda

Konike

Bézierove krivulje

B-splajnovi

Završnizadatak

Sve tri naredbe su ekvivalentne definiranjuodgovarajuce matrice i pozivu naredbeglMultMatrix*(), ali su brže.Kod naredbi za translaciju, rotaciju i skaliranje matricetransformacija se racunaju automatski.

Page 42: Vježbe Nela Bosner OpenGL Završni Vježbe - Naslovnicanela/rgpredavanja/RG_vjezbe.pdf · Sintaksa OpenGL naredbi OpenGL zaglavlja GLUT naredbe Neke osnovne OpenGL naredbe Transformacije

Vježbe

Nela Bosner

OpenGLSintaksa OpenGLnaredbi

OpenGL zaglavlja

GLUT naredbe

Neke osnovneOpenGL naredbe

Transformacijemodela i pogleda

Projekcije i volumenipogleda

Konike

Bézierove krivulje

B-splajnovi

Završnizadatak

Transformacije pogledadefault položaj kamere: smještena u ishodištu iorijentirana prema negativnoj z osikoristiti naredbe glTranslate*() i glRotate*()void gluLookAt(GLdouble eyex, GLdoubleeyey, GLdouble eyez, GLdouble centerx,GLdouble centery, GLdouble centerz,GLdouble upx, GLdouble upy, GLdoubleupz) — definira matricu pogleda i množi ju s tekucommatricom. Tocka pogleda je definirana sa eyex, eyey,i eyez. Argumenti centerx, centery, i centerzderfiniraju tocku na liniji pogleda, obicno u središtuscene koju se gleda. Argumenti upx, upy, i upzdefiniraju smjer prema gore.

Page 43: Vježbe Nela Bosner OpenGL Završni Vježbe - Naslovnicanela/rgpredavanja/RG_vjezbe.pdf · Sintaksa OpenGL naredbi OpenGL zaglavlja GLUT naredbe Neke osnovne OpenGL naredbe Transformacije

Vježbe

Nela Bosner

OpenGLSintaksa OpenGLnaredbi

OpenGL zaglavlja

GLUT naredbe

Neke osnovneOpenGL naredbe

Transformacijemodela i pogleda

Projekcije i volumenipogleda

Konike

Bézierove krivulje

B-splajnovi

Završnizadatak

ZadatakNapišite program koji implementira transformacije izprimjera sa predavanja.

- - - - -

6 6 6 6 6�� @@t�� @@

tP1

P2

originalnakucica

translacija P1u ishodište

skaliranje rotacija translacijaishodišta u P2

Pocetna slika kucice neka bude nacrtana u plavoj boji, azavršna u crvenoj.

Page 44: Vježbe Nela Bosner OpenGL Završni Vježbe - Naslovnicanela/rgpredavanja/RG_vjezbe.pdf · Sintaksa OpenGL naredbi OpenGL zaglavlja GLUT naredbe Neke osnovne OpenGL naredbe Transformacije

Vježbe

Nela Bosner

OpenGLSintaksa OpenGLnaredbi

OpenGL zaglavlja

GLUT naredbe

Neke osnovneOpenGL naredbe

Transformacijemodela i pogleda

Projekcije i volumenipogleda

Konike

Bézierove krivulje

B-splajnovi

Završnizadatak

Zadatak (nastavak)

Koordinate vrhova kucice:(0,0) (30,0) (30,30) (15,45) (0,30)

Koordinate tocke P1: (15,24)Koordinate tocke P2: (40,30)Skaliranje: S(0.3,0.3)

ZadatakNapišite program koji definira pravilnu cetverostranupiramidu, takvu da joj je baza bijele boje, a stranice crvene,žute, plave i zelene boje. Ovisno o unosu korisnika,program treba prikazati ortografsku projekciju baze, jedneod stranica, brida izmedu žute i plave stranice ili pogledodozgora.

Page 45: Vježbe Nela Bosner OpenGL Završni Vježbe - Naslovnicanela/rgpredavanja/RG_vjezbe.pdf · Sintaksa OpenGL naredbi OpenGL zaglavlja GLUT naredbe Neke osnovne OpenGL naredbe Transformacije

Vježbe

Nela Bosner

OpenGLSintaksa OpenGLnaredbi

OpenGL zaglavlja

GLUT naredbe

Neke osnovneOpenGL naredbe

Transformacijemodela i pogleda

Projekcije i volumenipogleda

Konike

Bézierove krivulje

B-splajnovi

Završnizadatak

Zadatak (nastavak)Za bojanje stranice jednom bojom postavite model bojanja uinit() potprogramu na

glShadeModel (GL_FLAT);

Kako biste omogucili neprikazivanje sakrivenih plohatrebate dodati sljedece:

glutInitDisplayMode (GLUT_SINGLE |GLUT_RGB | GLUT_DEPTH); u main()...

glEnable(GL_DEPTH_TEST); u init()...

glClear (GL_COLOR_BUFFER_BIT |GL_DEPTH_BUFFER_BIT); u display()

Page 46: Vježbe Nela Bosner OpenGL Završni Vježbe - Naslovnicanela/rgpredavanja/RG_vjezbe.pdf · Sintaksa OpenGL naredbi OpenGL zaglavlja GLUT naredbe Neke osnovne OpenGL naredbe Transformacije

Vježbe

Nela Bosner

OpenGLSintaksa OpenGLnaredbi

OpenGL zaglavlja

GLUT naredbe

Neke osnovneOpenGL naredbe

Transformacijemodela i pogleda

Projekcije i volumenipogleda

Konike

Bézierove krivulje

B-splajnovi

Završnizadatak

Projekcije i volumeni pogleda

Prije definiranja transformacija koja definiraju projekcijui njen volumen pogleda potrebno je pozvati

glMatrixMode(GL_PROJECTION);glLoadIdentity();

OpenGL ima mogucnost definiranja dviju vrstaprojekcija

ortografske paralelne projekcijeperspektivne projekcije

Prakticnije je pomaknuti predmet na željeni položaj(transformacije pogleda) nego komponiratitransformacije sa projekcijom.

Page 47: Vježbe Nela Bosner OpenGL Završni Vježbe - Naslovnicanela/rgpredavanja/RG_vjezbe.pdf · Sintaksa OpenGL naredbi OpenGL zaglavlja GLUT naredbe Neke osnovne OpenGL naredbe Transformacije

Vježbe

Nela Bosner

OpenGLSintaksa OpenGLnaredbi

OpenGL zaglavlja

GLUT naredbe

Neke osnovneOpenGL naredbe

Transformacijemodela i pogleda

Projekcije i volumenipogleda

Konike

Bézierove krivulje

B-splajnovi

Završnizadatak

void glOrtho(GLdouble left, GLdoubleright, GLdouble bottom, GLdouble top,GLdouble near, GLdouble far) — kreira matricuza ortografski paralelni volumen pogleda, i množitekucu matricu s njom. Volumen pogleda je kvadar

(left, bottom, -near) i (right, top,-near) su tocke prednje ravnine za obrezivanje, kojese redom preslikavaju u donji lijevi kut i gornji desni kutotvora pogleda.(left, bottom, -far) i (right, top, -far)su tocke stražnje ravnine za obrezivanje, koje sepreslikavaju u iste tocke.Smjer projekcije je paralelan z osi, a pogled je usmjerenprema negativnoj z osi.

Page 48: Vježbe Nela Bosner OpenGL Završni Vježbe - Naslovnicanela/rgpredavanja/RG_vjezbe.pdf · Sintaksa OpenGL naredbi OpenGL zaglavlja GLUT naredbe Neke osnovne OpenGL naredbe Transformacije

Vježbe

Nela Bosner

OpenGLSintaksa OpenGLnaredbi

OpenGL zaglavlja

GLUT naredbe

Neke osnovneOpenGL naredbe

Transformacijemodela i pogleda

Projekcije i volumenipogleda

Konike

Bézierove krivulje

B-splajnovi

Završnizadatak

Slika: Volumen pogleda ortografske projekcije.

Page 49: Vježbe Nela Bosner OpenGL Završni Vježbe - Naslovnicanela/rgpredavanja/RG_vjezbe.pdf · Sintaksa OpenGL naredbi OpenGL zaglavlja GLUT naredbe Neke osnovne OpenGL naredbe Transformacije

Vježbe

Nela Bosner

OpenGLSintaksa OpenGLnaredbi

OpenGL zaglavlja

GLUT naredbe

Neke osnovneOpenGL naredbe

Transformacijemodela i pogleda

Projekcije i volumenipogleda

Konike

Bézierove krivulje

B-splajnovi

Završnizadatak

void glFrustum(GLdouble left, GLdoubleright, GLdouble bottom, GLdouble top,GLdouble near, GLdouble far); — kreiramatricu za perspektivni volumen pogleda, i množitekucu matricu s njom. Volumen pogleda je krnjapiramida

(left, bottom, -near) i (right, top,-near) su tocke bliže ravnine za obrezivanje, kojedefiniraju gornju bazu krnje piramide.near i far su pozitivne udaljenosti središta projekcije(ujedno i tocke pogleda) od prednje i stražnje ravnine zaobrezivanje, duž negativne z osi.Središte projekcije je u ishodištu, a pogled je usmjerenprema negativnoj z osi.Ravnina projekcije se podudara sa prednjom ravninomza obrezivanje.Krnja piramida ne mora biti simetricna.

Page 50: Vježbe Nela Bosner OpenGL Završni Vježbe - Naslovnicanela/rgpredavanja/RG_vjezbe.pdf · Sintaksa OpenGL naredbi OpenGL zaglavlja GLUT naredbe Neke osnovne OpenGL naredbe Transformacije

Vježbe

Nela Bosner

OpenGLSintaksa OpenGLnaredbi

OpenGL zaglavlja

GLUT naredbe

Neke osnovneOpenGL naredbe

Transformacijemodela i pogleda

Projekcije i volumenipogleda

Konike

Bézierove krivulje

B-splajnovi

Završnizadatak

Slika: Volumen pogleda perspektivne projekcije definiran saglFrustum().

Page 51: Vježbe Nela Bosner OpenGL Završni Vježbe - Naslovnicanela/rgpredavanja/RG_vjezbe.pdf · Sintaksa OpenGL naredbi OpenGL zaglavlja GLUT naredbe Neke osnovne OpenGL naredbe Transformacije

Vježbe

Nela Bosner

OpenGLSintaksa OpenGLnaredbi

OpenGL zaglavlja

GLUT naredbe

Neke osnovneOpenGL naredbe

Transformacijemodela i pogleda

Projekcije i volumenipogleda

Konike

Bézierove krivulje

B-splajnovi

Završnizadatak

void gluPerspective(GLdouble fovy,GLdouble aspect, GLdouble near, GLdoublefar); — kreira matricu za perspektivni volumenpogleda, i množi tekucu matricu s njom. Volumenpogleda je krnja piramida

fovy je kut polja pogleda u xz ravnini, njegovavrijednost mora biti u rasponu [0,180].aspect je omjer širine i visine gornje baze krnjepiramide.near i far su pozitivne udaljenosti središta projekcije(ujedno i tocke pogleda) od prednje i stražnje ravnine zaobrezivanje, duž negativne z osi.Središte projekcije je u ishodištu, a pogled je usmjerenprema negativnoj z osi.Ravnina projekcije se podudara sa prednjom ravninomza obrezivanje.Krnja piramida je simetricna.

Page 52: Vježbe Nela Bosner OpenGL Završni Vježbe - Naslovnicanela/rgpredavanja/RG_vjezbe.pdf · Sintaksa OpenGL naredbi OpenGL zaglavlja GLUT naredbe Neke osnovne OpenGL naredbe Transformacije

Vježbe

Nela Bosner

OpenGLSintaksa OpenGLnaredbi

OpenGL zaglavlja

GLUT naredbe

Neke osnovneOpenGL naredbe

Transformacijemodela i pogleda

Projekcije i volumenipogleda

Konike

Bézierove krivulje

B-splajnovi

Završnizadatak

Slika: Volumen pogleda perspektivne projekcije definiran sagluPerspective().

Page 53: Vježbe Nela Bosner OpenGL Završni Vježbe - Naslovnicanela/rgpredavanja/RG_vjezbe.pdf · Sintaksa OpenGL naredbi OpenGL zaglavlja GLUT naredbe Neke osnovne OpenGL naredbe Transformacije

Vježbe

Nela Bosner

OpenGLSintaksa OpenGLnaredbi

OpenGL zaglavlja

GLUT naredbe

Neke osnovneOpenGL naredbe

Transformacijemodela i pogleda

Projekcije i volumenipogleda

Konike

Bézierove krivulje

B-splajnovi

Završnizadatak

ZadatakNapišite program koji crta perspektivni pogled na 3D kucicu.

Kucica je zadana koordinatama svojih vrhova:

(0,0,10), (30,0,10), (30,30,10), (15,45,10), (0,30,10),

(0,0,70), (30,0,70), (30,30,70), (15,45,70), (0,30,70)

Središte projekcije u koordinatama scene zadano je sa:

COP = (70,15,110)

Referentna tocka pogleda je:

VRP = (30,15,70)

Page 54: Vježbe Nela Bosner OpenGL Završni Vježbe - Naslovnicanela/rgpredavanja/RG_vjezbe.pdf · Sintaksa OpenGL naredbi OpenGL zaglavlja GLUT naredbe Neke osnovne OpenGL naredbe Transformacije

Vježbe

Nela Bosner

OpenGLSintaksa OpenGLnaredbi

OpenGL zaglavlja

GLUT naredbe

Neke osnovneOpenGL naredbe

Transformacijemodela i pogleda

Projekcije i volumenipogleda

Konike

Bézierove krivulje

B-splajnovi

Završnizadatak

Zadatak (nastavak)Normala na ravninu projekcije i vektor prema gore su:

VPN = (1,0,1), VUP = (0,1,0)

Udaljenosti do prednje i zadnje ravnine za obrezivanjesu:

F = 0, B = −64

pri cemu se prednja ravnina poklapa sa ravninompogleda.Koordinate vrhova prozora na ravnini pogledadefinirane su sa:

(umin, vmin) = (−16,−20), (umax , vmax) = (26,30)

Page 55: Vježbe Nela Bosner OpenGL Završni Vježbe - Naslovnicanela/rgpredavanja/RG_vjezbe.pdf · Sintaksa OpenGL naredbi OpenGL zaglavlja GLUT naredbe Neke osnovne OpenGL naredbe Transformacije

Vježbe

Nela Bosner

OpenGLSintaksa OpenGLnaredbi

OpenGL zaglavlja

GLUT naredbe

Neke osnovneOpenGL naredbe

Transformacijemodela i pogleda

Projekcije i volumenipogleda

Konike

Bézierove krivulje

B-splajnovi

Završnizadatak

Zadatak (nastavak)Neka vaš program ima dvije verzije:

1 neka koristi naredbu glFrustum()

2 neka ima definirane normalizirajuce transformacije bezobrezivanja, i transformaciju kanonickog volumenapogleda perspektivne projekcije u kanonicki volumenpogleda paralelne projekcije (M); na kraju koristiteglOrtho()

ZadatakZadatak je isti kao i prethodni, samo što je

VUP =

(12,

√3

2,0

).

Page 56: Vježbe Nela Bosner OpenGL Završni Vježbe - Naslovnicanela/rgpredavanja/RG_vjezbe.pdf · Sintaksa OpenGL naredbi OpenGL zaglavlja GLUT naredbe Neke osnovne OpenGL naredbe Transformacije

Vježbe

Nela Bosner

OpenGLSintaksa OpenGLnaredbi

OpenGL zaglavlja

GLUT naredbe

Neke osnovneOpenGL naredbe

Transformacijemodela i pogleda

Projekcije i volumenipogleda

Konike

Bézierove krivulje

B-splajnovi

Završnizadatak

ZadatakNapišite program koji crta perspektivni pogled na 3D kucicu.

Koordinate vrhova kucice su iste kao i u prethodnomzadatku.Središte projekcije u koordinatama scene zadano je sa:

COP = (70,70,110)

Referentna tocka pogleda je:

VRP = (30,30,70)

Normala na ravninu projekcije i vektor prema gore su:

VPN = (1,1,1), VUP = (0,1,0)

Page 57: Vježbe Nela Bosner OpenGL Završni Vježbe - Naslovnicanela/rgpredavanja/RG_vjezbe.pdf · Sintaksa OpenGL naredbi OpenGL zaglavlja GLUT naredbe Neke osnovne OpenGL naredbe Transformacije

Vježbe

Nela Bosner

OpenGLSintaksa OpenGLnaredbi

OpenGL zaglavlja

GLUT naredbe

Neke osnovneOpenGL naredbe

Transformacijemodela i pogleda

Projekcije i volumenipogleda

Konike

Bézierove krivulje

B-splajnovi

Završnizadatak

Zadatak (nastavak)Udaljenosti do prednje i zadnje ravnine za obrezivanjesu:

F = 0, B = −71

pri cemu se prednja ravnina poklapa sa ravninompogleda.Koordinate vrhova prozora na ravnini pogledadefinirane su sa:

(umin, vmin) = (−20,−20), (umax , vmax) = (30,30)

Page 58: Vježbe Nela Bosner OpenGL Završni Vježbe - Naslovnicanela/rgpredavanja/RG_vjezbe.pdf · Sintaksa OpenGL naredbi OpenGL zaglavlja GLUT naredbe Neke osnovne OpenGL naredbe Transformacije

Vježbe

Nela Bosner

OpenGLSintaksa OpenGLnaredbi

OpenGL zaglavlja

GLUT naredbe

Neke osnovneOpenGL naredbe

Transformacijemodela i pogleda

Projekcije i volumenipogleda

Konike

Bézierove krivulje

B-splajnovi

Završnizadatak

Konike

Zadatak

Želimo naci racionalni parametarski oblik jednadžbekružnog luka prikazanog na slici.

Kružnica ima radijus r i kut luka je α.U svakoj tocci kružnice tangenta je okomita na radijus.

Page 59: Vježbe Nela Bosner OpenGL Završni Vježbe - Naslovnicanela/rgpredavanja/RG_vjezbe.pdf · Sintaksa OpenGL naredbi OpenGL zaglavlja GLUT naredbe Neke osnovne OpenGL naredbe Transformacije

Vježbe

Nela Bosner

OpenGLSintaksa OpenGLnaredbi

OpenGL zaglavlja

GLUT naredbe

Neke osnovneOpenGL naredbe

Transformacijemodela i pogleda

Projekcije i volumenipogleda

Konike

Bézierove krivulje

B-splajnovi

Završnizadatak

Zadatak (nastavak)

Dužina T − C raspolavlja kut α i sijece kružnicu u tocciPc .Zbog toga što se radi o kružnom luku:

‖T − P1‖ = ‖T − P2‖

Buduci da je dužina A1 − Pc tangentna na kružnicu uPc , ako promatramo luk sa kutom α/2 imamo analognusituaciju kao gore:

‖A1 − P1‖ = ‖A1 − Pc‖

Isto tako:‖A2 − P2‖ = ‖A2 − Pc‖

Page 60: Vježbe Nela Bosner OpenGL Završni Vježbe - Naslovnicanela/rgpredavanja/RG_vjezbe.pdf · Sintaksa OpenGL naredbi OpenGL zaglavlja GLUT naredbe Neke osnovne OpenGL naredbe Transformacije

Vježbe

Nela Bosner

OpenGLSintaksa OpenGLnaredbi

OpenGL zaglavlja

GLUT naredbe

Neke osnovneOpenGL naredbe

Transformacijemodela i pogleda

Projekcije i volumenipogleda

Konike

Bézierove krivulje

B-splajnovi

Završnizadatak

Zadatak (nastavak)

Buduci da je dužina A1 − A2 tangentna na kružnicu uPc , paralelna je sa dužinom P2 − P1 i radijus kroz Pc jeokomit na nju.Imamo sljedece kuteve

∠PiTC =π

2− α

2, ∠TAiPc =

α

2, za i = 1,2.

odakle slijedi

‖Ai − Pc‖ = cos(α

2

)‖T − Ai‖, za i = 1,2.

Page 61: Vježbe Nela Bosner OpenGL Završni Vježbe - Naslovnicanela/rgpredavanja/RG_vjezbe.pdf · Sintaksa OpenGL naredbi OpenGL zaglavlja GLUT naredbe Neke osnovne OpenGL naredbe Transformacije

Vježbe

Nela Bosner

OpenGLSintaksa OpenGLnaredbi

OpenGL zaglavlja

GLUT naredbe

Neke osnovneOpenGL naredbe

Transformacijemodela i pogleda

Projekcije i volumenipogleda

Konike

Bézierove krivulje

B-splajnovi

Završnizadatak

Zadatak (nastavak)Imamo

ri =‖T − Ai‖‖Ai − Pi‖

, i = 1,2

=‖T − Ai‖‖Ai − Pc‖

=‖T − Ai‖

cos(α2

)‖T − Ai‖

=1

cos(α2

)odakle je

K = r1r2 =1

cos2(α2

)

Page 62: Vježbe Nela Bosner OpenGL Završni Vježbe - Naslovnicanela/rgpredavanja/RG_vjezbe.pdf · Sintaksa OpenGL naredbi OpenGL zaglavlja GLUT naredbe Neke osnovne OpenGL naredbe Transformacije

Vježbe

Nela Bosner

OpenGLSintaksa OpenGLnaredbi

OpenGL zaglavlja

GLUT naredbe

Neke osnovneOpenGL naredbe

Transformacijemodela i pogleda

Projekcije i volumenipogleda

Konike

Bézierove krivulje

B-splajnovi

Završnizadatak

Zadatak (nastavak)Ovu reprezentaciju možemo koristiti za kuteve0 < α < π, ali ako je α blizu π postupak je numerickinestabilan.Uzet cemo

w0 = w2 = 1, w1 = cos(α

2

).

Napišite potprogram konika() sa sljedecim ulaznimparametrima:

tocke Pi i parametri wi , za i = 0,1,2,granice segmenta a i b, te broj podsegmenata n nakoje dijelimo segment [a,b].

Potprogram treba implementirati algoritam za crtanje tocakana luku konike izveden na predavanjima,

Page 63: Vježbe Nela Bosner OpenGL Završni Vježbe - Naslovnicanela/rgpredavanja/RG_vjezbe.pdf · Sintaksa OpenGL naredbi OpenGL zaglavlja GLUT naredbe Neke osnovne OpenGL naredbe Transformacije

Vježbe

Nela Bosner

OpenGLSintaksa OpenGLnaredbi

OpenGL zaglavlja

GLUT naredbe

Neke osnovneOpenGL naredbe

Transformacijemodela i pogleda

Projekcije i volumenipogleda

Konike

Bézierove krivulje

B-splajnovi

Završnizadatak

Zadatak (nastavak)

tako da crta tocke na konici za tj , j = 0,1, . . . ,n, pricemu su tj = a + j · (b − a)/n,da konika prolazi kroz tocke P0 i P2,i ima smjer tangente u P0 zadan sa P1 − P0, a smjertangente u P2 zadan sa P2 − P1.

Svoj potprogram testirajte na kružnom luku sa sljedecimpodacima:

P0 = (10,0), P1 = (10,10), P2 = (0,10)

w0 = w2 = 1, w1 =√

2/2a = 0, b = 1, n = 100

Probajte mijenjati parametar w1, odnosno K tako daK poprimi razlicite velicine K > 1, K = 1, K < 1w1 bude negativan

Page 64: Vježbe Nela Bosner OpenGL Završni Vježbe - Naslovnicanela/rgpredavanja/RG_vjezbe.pdf · Sintaksa OpenGL naredbi OpenGL zaglavlja GLUT naredbe Neke osnovne OpenGL naredbe Transformacije

Vježbe

Nela Bosner

OpenGLSintaksa OpenGLnaredbi

OpenGL zaglavlja

GLUT naredbe

Neke osnovneOpenGL naredbe

Transformacijemodela i pogleda

Projekcije i volumenipogleda

Konike

Bézierove krivulje

B-splajnovi

Završnizadatak

ZadatakNapišite potprogram konika_tocke() sa sljedecimulaznim parametrima:

tocke Pi i = 0,1,2,3, pri cemu P3 treba biti unutartrokuta 4P0P1P2

granice segmenta a i b, te broj podsegmenata n nakoje dijelimo segment [a,b].

Potprogram treba implementirati algoritam za crtanje tocakana luku konike, tako da crta tocke na konici za tj ,j = 0,1, . . . ,n, pri cemu su tj = a + j · (b − a)/n. Konika

prolazi kroz tocke P0, P2 i P3,ima smjer tangente u P0 zadan sa P1 − P0, a smjertangente u P2 zadan sa P2 − P1,

Page 65: Vježbe Nela Bosner OpenGL Završni Vježbe - Naslovnicanela/rgpredavanja/RG_vjezbe.pdf · Sintaksa OpenGL naredbi OpenGL zaglavlja GLUT naredbe Neke osnovne OpenGL naredbe Transformacije

Vježbe

Nela Bosner

OpenGLSintaksa OpenGLnaredbi

OpenGL zaglavlja

GLUT naredbe

Neke osnovneOpenGL naredbe

Transformacijemodela i pogleda

Projekcije i volumenipogleda

Konike

Bézierove krivulje

B-splajnovi

Završnizadatak

Zadatak (nastavak)

iz uvjeta da prolazi kroz P3 treba izracunati parametarK

−L1(P3)L2(P3)

(L3(P3))2 = c = − λ

1− λ≤ 0

K =4λ

1− λSvoj potprogram testirajte na kružnom luku iz prethodnogzadatka sa P3 = (6,8).

Page 66: Vježbe Nela Bosner OpenGL Završni Vježbe - Naslovnicanela/rgpredavanja/RG_vjezbe.pdf · Sintaksa OpenGL naredbi OpenGL zaglavlja GLUT naredbe Neke osnovne OpenGL naredbe Transformacije

Vježbe

Nela Bosner

OpenGLSintaksa OpenGLnaredbi

OpenGL zaglavlja

GLUT naredbe

Neke osnovneOpenGL naredbe

Transformacijemodela i pogleda

Projekcije i volumenipogleda

Konike

Bézierove krivulje

B-splajnovi

Završnizadatak

U GLU paketu se nalaze potprogrami za crtanjepoligonalnih aproksimacija krivulja i poliedarskihaproksimacija ploha drugog reda:

sferecilindrikrugovi (diskovi)kružni isjecci

Za kreiranje, podešavanje i crtanje krivulja i ploha drugogreda potrebno je izvršiti sljedece korake:

1 Za kreiranje objekta krivulje ili plohe treba koristitigluNewQuadric().

2 Za specificiranje svojstava krivulje ili plohe trebakoristiti:

gluQuadricDrawStyle() za izbor nacinaprikazivanja krivulje ili plohe pomocu tocaka, linija, ilipopunjenih poligona.

Page 67: Vježbe Nela Bosner OpenGL Završni Vježbe - Naslovnicanela/rgpredavanja/RG_vjezbe.pdf · Sintaksa OpenGL naredbi OpenGL zaglavlja GLUT naredbe Neke osnovne OpenGL naredbe Transformacije

Vježbe

Nela Bosner

OpenGLSintaksa OpenGLnaredbi

OpenGL zaglavlja

GLUT naredbe

Neke osnovneOpenGL naredbe

Transformacijemodela i pogleda

Projekcije i volumenipogleda

Konike

Bézierove krivulje

B-splajnovi

Završnizadatak

3 Za crtanje krivulje ili plohe treba koristitigluSphere(), gluCylinder(), gluDisk(), iligluPartialDisk().

4 Za uništavanje objekta kada više nije potreban trebakoristiti gluDeleteQuadric(). Ako je potrebnokreirati novu krivulju ili plohu, najbolje je ponovoiskoristiti isti objekt.

Potprogrami:GLUquadricObj* gluNewQuadric (void) —kreira novi objekt krivulje ili plohe drugog reda i vracapokazivac na njega.void gluDeleteQuadric (GLUquadricObj

*qobj) — uništava objekt qobj krivulje ili plohe ioslobada memoriju koju je koristio.

Page 68: Vježbe Nela Bosner OpenGL Završni Vježbe - Naslovnicanela/rgpredavanja/RG_vjezbe.pdf · Sintaksa OpenGL naredbi OpenGL zaglavlja GLUT naredbe Neke osnovne OpenGL naredbe Transformacije

Vježbe

Nela Bosner

OpenGLSintaksa OpenGLnaredbi

OpenGL zaglavlja

GLUT naredbe

Neke osnovneOpenGL naredbe

Transformacijemodela i pogleda

Projekcije i volumenipogleda

Konike

Bézierove krivulje

B-splajnovi

Završnizadatak

void gluQuadricDrawStyle (GLUquadricObj*qobj, GLenum drawStyle) — za objekt qobjovaj potprogram definira nacin prikazivanja krivulje iliplohe. Dozvoljene vrijednosti su:

GLU_POINT i GLU_LINE specificiraju da seaproksimativni poligon krivulje ili poliedar plohe prikažecrtanjem tocaka u vrhovima, ili crtanjem linija izmedjususjednih vrhova.GLU_SILHOUETTE slicno kao GLU_LINE, osim što sene prikazuju rubovi koji razdvajaju komplanarnestranice (cesto se koristi kod gluDisk() igluPartialDisk()).GLU_FILL specificira da se aproksimacija ploheprikaže pomocu popunjenih poligona.

Page 69: Vježbe Nela Bosner OpenGL Završni Vježbe - Naslovnicanela/rgpredavanja/RG_vjezbe.pdf · Sintaksa OpenGL naredbi OpenGL zaglavlja GLUT naredbe Neke osnovne OpenGL naredbe Transformacije

Vježbe

Nela Bosner

OpenGLSintaksa OpenGLnaredbi

OpenGL zaglavlja

GLUT naredbe

Neke osnovneOpenGL naredbe

Transformacijemodela i pogleda

Projekcije i volumenipogleda

Konike

Bézierove krivulje

B-splajnovi

Završnizadatak

void gluSphere (GLUquadricObj *qobj,GLdouble radius, GLint slices, GLintstacks) — crta sferu danog radijusa, sa središtem uishodištu. Sfera je podijeljena na slices meridijanaoko z osi, i na stacks paralela duž z osi.void gluCylinder (GLUquadricObj *qobj,GLdouble baseRadius, GLdouble topRadius,GLdouble height, GLint slices, GLintstacks) — crta cilindar orijentiran duž z osi, sadonjom bazom cilindra na z = 0 i radijusombaseRadius, i gornjom na z =height s radijusomtopRadius. Cilindar je podijeljen na slicesmeridijana oko z osi, i na stacks paralela duž z osi.

Page 70: Vježbe Nela Bosner OpenGL Završni Vježbe - Naslovnicanela/rgpredavanja/RG_vjezbe.pdf · Sintaksa OpenGL naredbi OpenGL zaglavlja GLUT naredbe Neke osnovne OpenGL naredbe Transformacije

Vježbe

Nela Bosner

OpenGLSintaksa OpenGLnaredbi

OpenGL zaglavlja

GLUT naredbe

Neke osnovneOpenGL naredbe

Transformacijemodela i pogleda

Projekcije i volumenipogleda

Konike

Bézierove krivulje

B-splajnovi

Završnizadatak

void gluDisk (GLUquadricObj *qobj,GLdouble innerRadius, GLdoubleouterRadius, GLint slices, GLint rings)— crta disk u ravnini z = 0, sa radijusomouterRadius i koncentricnom kružnom rupomradijusa innerRadius. Disk je podijeljen na sliceskriški oko z osi i na rings koncentricnih prstenova okoz osi.void gluPartialDisk (GLUquadricObj

*qobj, GLdouble innerRadius, GLdoubleouterRadius, GLint slices, GLint rings,GLdouble startAngle, GLdoublesweepAngle) — crta isjecak diska u ravnini z = 0 naisti nacin kao i gluDisk(). Isjecak je nacrtan od kutastartAngle do kuta sweepAngle. Kutevi se mjere ustupnjevima, kut od 0◦ se poklapa sa +y osi, a kutevise mjere u smjeru kazaljke na satu.

Page 71: Vježbe Nela Bosner OpenGL Završni Vježbe - Naslovnicanela/rgpredavanja/RG_vjezbe.pdf · Sintaksa OpenGL naredbi OpenGL zaglavlja GLUT naredbe Neke osnovne OpenGL naredbe Transformacije

Vježbe

Nela Bosner

OpenGLSintaksa OpenGLnaredbi

OpenGL zaglavlja

GLUT naredbe

Neke osnovneOpenGL naredbe

Transformacijemodela i pogleda

Projekcije i volumenipogleda

Konike

Bézierove krivulje

B-splajnovi

Završnizadatak

ZadatakNapišite program koji crta kružnicu u x-y ravnini radijusa r ,zatim ju rotira rotacijom Rx(θ) pod raznim kutevima itranslatira duž −z osi na razlicite udaljenosti u. Uvjerite seda perspektivnom projekcijom kružnice možemo dobitielipsu, parabolu i hiperbolu.

Provjerite da je zau < r | sin θ|, krivulja je hiperbolau = r | sin θ|, krivulja je parabolau > r | sin θ|, krivulja je elipsa

Page 72: Vježbe Nela Bosner OpenGL Završni Vježbe - Naslovnicanela/rgpredavanja/RG_vjezbe.pdf · Sintaksa OpenGL naredbi OpenGL zaglavlja GLUT naredbe Neke osnovne OpenGL naredbe Transformacije

Vježbe

Nela Bosner

OpenGLSintaksa OpenGLnaredbi

OpenGL zaglavlja

GLUT naredbe

Neke osnovneOpenGL naredbe

Transformacijemodela i pogleda

Projekcije i volumenipogleda

Konike

Bézierove krivulje

B-splajnovi

Završnizadatak

Bézierove krivulje

Domaca zadacaNapišite program koji ce nacrtati zadano slovo ili brojku:

α β γ δ ε ζ ϑ ξ ϕ ω

b e m s y 2 3 6 8

na dva nacina:1 pomocu po dijelovima konike s pogodnim konstantama

K ,2 pomocu po dijelovima Bézierove krivulje, pri cemu se

Bézierove krivulje crtaju algoritmom koji implementirauzatopnu podijelu krivulje.

Pazite na geometrijsku glatkocu krivulja, tako da ona štovjernije prikazuje zadano slovo ili brojku.

Page 73: Vježbe Nela Bosner OpenGL Završni Vježbe - Naslovnicanela/rgpredavanja/RG_vjezbe.pdf · Sintaksa OpenGL naredbi OpenGL zaglavlja GLUT naredbe Neke osnovne OpenGL naredbe Transformacije

Vježbe

Nela Bosner

OpenGLSintaksa OpenGLnaredbi

OpenGL zaglavlja

GLUT naredbe

Neke osnovneOpenGL naredbe

Transformacijemodela i pogleda

Projekcije i volumenipogleda

Konike

Bézierove krivulje

B-splajnovi

Završnizadatak

B-splajnovi

ZadatakNapišite potprograme koji implementiraju

de Boorov rekurzivni algoritam za B-splajnovede Boor – Coxovu rekurziju

Page 74: Vježbe Nela Bosner OpenGL Završni Vježbe - Naslovnicanela/rgpredavanja/RG_vjezbe.pdf · Sintaksa OpenGL naredbi OpenGL zaglavlja GLUT naredbe Neke osnovne OpenGL naredbe Transformacije

Vježbe

Nela Bosner

OpenGLSintaksa OpenGLnaredbi

OpenGL zaglavlja

GLUT naredbe

Neke osnovneOpenGL naredbe

Transformacijemodela i pogleda

Projekcije i volumenipogleda

Konike

Bézierove krivulje

B-splajnovi

Završnizadatak

Zadatak

Želimo nacrtati krivulju B-splajnova koja aproksimiraspiralu zadanu parametarskom jednadžbom

σ(t) = [cos(t), sin(t), t ].

Aproksimativnu krivulju odredit cemo pomocu podijelovima kubicne Hermiteove interpolacije sasljedecim parametrima:

m = 12;ui = iπ

2 , i = 0, . . . ,12;pi = σ(ui), i = 0, . . . ,12;qi = σ′(ui), i = 0, . . . ,12;

U ovom slucaju je N = 2m + 5 = 29 in = N − 3− 1 = 25.

Page 75: Vježbe Nela Bosner OpenGL Završni Vježbe - Naslovnicanela/rgpredavanja/RG_vjezbe.pdf · Sintaksa OpenGL naredbi OpenGL zaglavlja GLUT naredbe Neke osnovne OpenGL naredbe Transformacije

Vježbe

Nela Bosner

OpenGLSintaksa OpenGLnaredbi

OpenGL zaglavlja

GLUT naredbe

Neke osnovneOpenGL naredbe

Transformacijemodela i pogleda

Projekcije i volumenipogleda

Konike

Bézierove krivulje

B-splajnovi

Završnizadatak

Zadatak (nastavak)Za rješavanje sustava linearnih jednadžbi satridijagonalnom matricom upotrijebite potprogram kojise nalazi u datoteci tridijag_sustav.c, na adresi

http://www.math.hr/˜nela/rg.html/

Za potrebe ovog potprograma n × n tridijagonalnumatricu sustava A spremite u 3× n dimenzionalnopolje, a desnu stranu sutava b u n × 3 dimenzionalnopolje na sljedeci nacin:

1 Deklarirajte varijabledouble **a, **b, **x;

Varijabla x služit ce za spremanje rješenja sustava, istihje dimenzija kao i b.

Page 76: Vježbe Nela Bosner OpenGL Završni Vježbe - Naslovnicanela/rgpredavanja/RG_vjezbe.pdf · Sintaksa OpenGL naredbi OpenGL zaglavlja GLUT naredbe Neke osnovne OpenGL naredbe Transformacije

Vježbe

Nela Bosner

OpenGLSintaksa OpenGLnaredbi

OpenGL zaglavlja

GLUT naredbe

Neke osnovneOpenGL naredbe

Transformacijemodela i pogleda

Projekcije i volumenipogleda

Konike

Bézierove krivulje

B-splajnovi

Završnizadatak

Zadatak (nastavak)2 Alocirajte memorijua=(double **) malloc(3*sizeof(double*));for (i=0;i<3;i++)

a[i]=(double *) malloc(n*sizeof(double));b=(double **) malloc(n*sizeof(double*));for (i=0;i<n;i++)

b[i]=(double *) malloc(3*sizeof(double));

Za varijablu x nije potrebno alocirati memoriju.3 Polje a popunjavajte tako da u svaki redak stavite jednu

dijagonalu matrice A = [A[i][j]], npr za A ∈ R5×5:

a→∗ A[0][1] A[1][2] A[2][3] A[3][4]

A[0][0] A[1][1] A[2][2] A[3][3] A[4][4]

A[1][0] A[2][1] A[3][2] A[4][3] ∗Elementi oznaceni sa * se ne referenciraju.

Page 77: Vježbe Nela Bosner OpenGL Završni Vježbe - Naslovnicanela/rgpredavanja/RG_vjezbe.pdf · Sintaksa OpenGL naredbi OpenGL zaglavlja GLUT naredbe Neke osnovne OpenGL naredbe Transformacije

Vježbe

Nela Bosner

OpenGLSintaksa OpenGLnaredbi

OpenGL zaglavlja

GLUT naredbe

Neke osnovneOpenGL naredbe

Transformacijemodela i pogleda

Projekcije i volumenipogleda

Konike

Bézierove krivulje

B-splajnovi

Završnizadatak

Zadatak (nastavak)4 Prije funkcije main() stavite deklaraciju

double **tridijag_sustav(int n, intbr_stupaca_b, double **a, double **b);

gdje br_stupaca_b oznacava broj desnih strana (unašem slucaju to je 3).

5 Pozovite funkcijux=tridijag_sustav(n, 3, a, b);

6 Datoteku tridijag_sustav.c kompajlirajte zajednosa vašim izvršnim programom uz opciju

-llapack

Page 78: Vježbe Nela Bosner OpenGL Završni Vježbe - Naslovnicanela/rgpredavanja/RG_vjezbe.pdf · Sintaksa OpenGL naredbi OpenGL zaglavlja GLUT naredbe Neke osnovne OpenGL naredbe Transformacije

Vježbe

Nela Bosner

OpenGLSintaksa OpenGLnaredbi

OpenGL zaglavlja

GLUT naredbe

Neke osnovneOpenGL naredbe

Transformacijemodela i pogleda

Projekcije i volumenipogleda

Konike

Bézierove krivulje

B-splajnovi

Završnizadatak

−1.5−1

−0.50

0.51

−2

−1

0

10

5

10

15

20

xy

z

Slika: — originalna krivulja — Hermiteov interpolant◦ interpolacijske tocke ◦ kontrolne tocke

Page 79: Vježbe Nela Bosner OpenGL Završni Vježbe - Naslovnicanela/rgpredavanja/RG_vjezbe.pdf · Sintaksa OpenGL naredbi OpenGL zaglavlja GLUT naredbe Neke osnovne OpenGL naredbe Transformacije

Vježbe

Nela Bosner

OpenGLSintaksa OpenGLnaredbi

OpenGL zaglavlja

GLUT naredbe

Neke osnovneOpenGL naredbe

Transformacijemodela i pogleda

Projekcije i volumenipogleda

Konike

Bézierove krivulje

B-splajnovi

Završnizadatak

Zadatak

Želimo nacrtati krivulju B-splajnova koja aproksimira spiraluzadanu u prethodnom zadatku, samo što cemo sada koristitiC2 kubicnu interpolaciju u cvorovima. Interpolacijske tockeneka su iste kao i u prethodnom zadatku.

Page 80: Vježbe Nela Bosner OpenGL Završni Vježbe - Naslovnicanela/rgpredavanja/RG_vjezbe.pdf · Sintaksa OpenGL naredbi OpenGL zaglavlja GLUT naredbe Neke osnovne OpenGL naredbe Transformacije

Vježbe

Nela Bosner

OpenGLSintaksa OpenGLnaredbi

OpenGL zaglavlja

GLUT naredbe

Neke osnovneOpenGL naredbe

Transformacijemodela i pogleda

Projekcije i volumenipogleda

Konike

Bézierove krivulje

B-splajnovi

Završnizadatak

−2−1

01

2

−2

−1

0

1

20

5

10

15

20

xy

z

Slika: — originalna krivulja — interpolant u cvorovima◦ interpolacijske tocke ◦ kontrolne tocke

Page 81: Vježbe Nela Bosner OpenGL Završni Vježbe - Naslovnicanela/rgpredavanja/RG_vjezbe.pdf · Sintaksa OpenGL naredbi OpenGL zaglavlja GLUT naredbe Neke osnovne OpenGL naredbe Transformacije

Vježbe

Nela Bosner

OpenGL

Završnizadatak

Završni zadatak

Želimo nacrtati mrežastu plohu koja nastaje “križanjem”jedne krivulje s drugom.Primjeri takvih ploha su:

Slika: Cilindar, konus, sfera i torus.

Page 82: Vježbe Nela Bosner OpenGL Završni Vježbe - Naslovnicanela/rgpredavanja/RG_vjezbe.pdf · Sintaksa OpenGL naredbi OpenGL zaglavlja GLUT naredbe Neke osnovne OpenGL naredbe Transformacije

Vježbe

Nela Bosner

OpenGL

Završnizadatak

Križanje krivulje γ2(s) s krivuljom γ1(t) znaci da γ2(s)pomicemo duž γ1(t), i pri tom je pravilno orijentiramo.Orijentaciju krivulje γ2(s) duž γ1(t) odreduje putujucitrobrid definiran sa jedinicnom tangentom Tγ1(t),jedinicnom normalom Nγ1(t) i binormalomBγ1(t) = Tγ1(t)× Nγ1(t).Novi položaj krivulje γ2(s) odreduje se transformacijom

Mγ1(t)γ2(s) + γ1(t),

gdje Mγ1(t) predstavlja matricu rotacije koja preslikavakanonicki xyz koordinatni sustav u sustav odredentrobridom {Tγ1(t),Nγ1(t),Bγ1(t)}.Mi cemo uvijek smjestiti krivulju γ2(s) u tocku γ1(t) takoda se ona nalazi u ravnini okomitoj na krivulju γ1 u t(ravnina je okomita na tangentu γ′1(t)).

Page 83: Vježbe Nela Bosner OpenGL Završni Vježbe - Naslovnicanela/rgpredavanja/RG_vjezbe.pdf · Sintaksa OpenGL naredbi OpenGL zaglavlja GLUT naredbe Neke osnovne OpenGL naredbe Transformacije

Vježbe

Nela Bosner

OpenGL

Završnizadatak

U završnim zadacima radi se o križanju ravninskekrivulje γ2(s) u xz ravnini sa ravninskom krivuljom γ1(t)u xy ravnini.U svakom zadatku krivulja γ1(t) prolazi kroz ishodište((0,0,0) = γ1(t0)) i u njemu ima tangentu γ′1(t0) usmjeru osi y .To znaci da se ravnina koja je okomita na krivulju γ1 uishodištu poklapa upravo sa xz ravninom.γ2(s) takoder prolazi kroz ishodište, tako da je ishodištesjecište tih dviju krivulja.

Page 84: Vježbe Nela Bosner OpenGL Završni Vježbe - Naslovnicanela/rgpredavanja/RG_vjezbe.pdf · Sintaksa OpenGL naredbi OpenGL zaglavlja GLUT naredbe Neke osnovne OpenGL naredbe Transformacije

Vježbe

Nela Bosner

OpenGL

Završnizadatak

−6

−4

−2

0

2

−2

0

20

1

2

3

4

5

6

xy

z

Slika: — γ1(t) — γ2(s)

Page 85: Vježbe Nela Bosner OpenGL Završni Vježbe - Naslovnicanela/rgpredavanja/RG_vjezbe.pdf · Sintaksa OpenGL naredbi OpenGL zaglavlja GLUT naredbe Neke osnovne OpenGL naredbe Transformacije

Vježbe

Nela Bosner

OpenGL

Završnizadatak Svaki novi položaj krivulje γ2(s), recimo u tocci γ1(t),

odreduje se rotacijom koja je zakrenula γ′1(t0) u γ′1(t).Nove položaje krivulje γ2(s), oznacene sa γ2,i(s),crtamo u tockama krivulje γ1(ui), gdje je {ui}ekvidistantna mreža u domeni od γ1.Na taj nacin dobivamo “meridijane” plohe.

Page 86: Vježbe Nela Bosner OpenGL Završni Vježbe - Naslovnicanela/rgpredavanja/RG_vjezbe.pdf · Sintaksa OpenGL naredbi OpenGL zaglavlja GLUT naredbe Neke osnovne OpenGL naredbe Transformacije

Vježbe

Nela Bosner

OpenGL

Završnizadatak

−6

−4

−2

0

2

−2

0

20

1

2

3

4

5

6

xy

z

Slika: — γ1(t) — γ2,i(s)

Page 87: Vježbe Nela Bosner OpenGL Završni Vježbe - Naslovnicanela/rgpredavanja/RG_vjezbe.pdf · Sintaksa OpenGL naredbi OpenGL zaglavlja GLUT naredbe Neke osnovne OpenGL naredbe Transformacije

Vježbe

Nela Bosner

OpenGL

Završnizadatak

−6 −5 −4 −3 −2 −1 0 1 2−2

−1

0

1

2

x

y

Slika: — γ1(t) — γ2,i(s)

Page 88: Vježbe Nela Bosner OpenGL Završni Vježbe - Naslovnicanela/rgpredavanja/RG_vjezbe.pdf · Sintaksa OpenGL naredbi OpenGL zaglavlja GLUT naredbe Neke osnovne OpenGL naredbe Transformacije

Vježbe

Nela Bosner

OpenGL

Završnizadatak

Na kraju, na domeni krivulje γ2 definiramoekvidistantnu mrežu {vj}, i za svaku tocku mreže vjpovežemo tocku γ2(vj) sa tockama {γ2,i(vj)}i svihnovih položaja krivulje γ2(s).Ovako dobivenu krivulju oznacimo sa γ1,j(t), i onapredstavlja transformiranu krivulju γ1(t) na visiniz = γ2(vj).Na taj nacin dobivamo “paralele” plohe.

Page 89: Vježbe Nela Bosner OpenGL Završni Vježbe - Naslovnicanela/rgpredavanja/RG_vjezbe.pdf · Sintaksa OpenGL naredbi OpenGL zaglavlja GLUT naredbe Neke osnovne OpenGL naredbe Transformacije

Vježbe

Nela Bosner

OpenGL

Završnizadatak

−6

−4

−2

0

2

−2

0

20

1

2

3

4

5

6

xy

z

Slika: — γ1,j(t) — γ2,i(s)

Page 90: Vježbe Nela Bosner OpenGL Završni Vježbe - Naslovnicanela/rgpredavanja/RG_vjezbe.pdf · Sintaksa OpenGL naredbi OpenGL zaglavlja GLUT naredbe Neke osnovne OpenGL naredbe Transformacije

Vježbe

Nela Bosner

OpenGL

Završnizadatak

Konkretno u zadacima biti ce definirane krivulje δ1(t) iδ2(s) koje ce najprije trebati aproksimirati krivuljamaB-splajnova pomocu C2 kubicne interpolacije ucvorovima.Interpolacija neka se vrši u cvorovima gore navedenihekvidistantnih mreža {ui} i {vj} u domenama krivulja.U svakoj mreži neka bude najmanje 20 cvorova, a nemora ih biti jednaki broj.Dobiveni interpolanti γ1(t) i γ2(s) imat ce tada istedomene kao i δ1(t) i δ2(s), i njih koristite za generiranjeplohe.Za svaku krivulju γ1,j(t) ponovo koristite C2 kubicnuinterpolaciju u istim cvorovima kao i kod racunanjaγ1(t).

Page 91: Vježbe Nela Bosner OpenGL Završni Vježbe - Naslovnicanela/rgpredavanja/RG_vjezbe.pdf · Sintaksa OpenGL naredbi OpenGL zaglavlja GLUT naredbe Neke osnovne OpenGL naredbe Transformacije

Vježbe

Nela Bosner

OpenGL

Završnizadatak

NapomenaPrimjena rotacije na krivulju B-splajnova svodi se naprimjenu rotacije samo na kontrolne tocke.