Leksjon G2: Transformasjoner



Like dokumenter
Leksjon 2: Transformasjoner

Leksjon G2: Transformasjoner

Leksjon 2: Transformasjoner

Forelesningsnotater SIF8039/ Grafisk databehandling

Leksjon 3: Lys og materialer

Emne 6. Lineære transformasjoner. Del 1

Oppgave 1 (25 %) - Flervalgsoppgaver

Programmering grunnkurs TDAT1001: Grafikkdel. Introduksjon

TDT4195 Bildeteknikk

Universitetet i Agder Fakultet for teknologi og realfag LØSNINGSFORSLAG. Dato: 11. desember 2008 Varighet: Antall sider inkl.

Forelesningsnotater SIF8039/ Grafisk databehandling

HØGSKOLEN I BERGEN Avdeling for ingeniørutdanning

INF Obligatorisk oppgave 2

a. Hva er de inverse transformasjonene avfølgende tre transformasjoner T, R og S: θ θ sin( ) cos( ) Fasit: 1 s x cos( θ) sin( θ) 0 0 y y z

UNIVERSITETET I OSLO

LØSNINGSANTYDNING EKSAMEN

PARAMETERFRAMSTILLING FOR EN KULEFLATE

Institutt for matematiske fag EKSAMEN i MA-132 Geometri Fredag 7. desember 2007 kl Løsningsforslag. Bokmål

1 Hva er grafisk databehandling?

LØSNINGSFORSLAG. Universitetet i Agder Fakultet for Teknologi og realfag. Dato: 03. desember 2009 Varighet: Antall sider inkl.

R2 - Kapittel 1: Vektorer

Emne 10 Litt mer om matriser, noen anvendelser

LØSNINGSANTYDNING. HØGSKOLEN I AGDER Fakultet for teknologi. DAT 200 Grafisk Databehandling. Ingen. Klasse(r): 2DTM, 2DT, 2 Siving, DT

R2 - Vektorer Løsningsskisser

RF5100 Lineær algebra Løsningsforslag til prøveeksamen

Løsning 1 med teori, IM3 høst 2012.

2D Transformasjoner (s. 51 i VTK boken) Translasjon. Del 2 Grafisk databehandling forts. Rotasjon. Skalering. y x = x + d x, y = y + d y.

HØGSKOLEN I SØR-TRØNDELAG

Rull-en-ball Introduksjon Unity PDF

Inf109 Programmering for realister Uke 5. I denne leksjonen skal vi se på hvordan vi kan lage våre egne vinduer og hvordan vi bruker disse.

Løsning 1med teori, IM3 høst 2011.

Løsningsforslag til eksamen i REA Fysikk,

HamboHus 5.4 Rev. 1, 8. september 2005 A. Cordray

Fasit til utvalgte oppgaver MAT1100, uka 18/10-22/10

Geometri. Menyene i geometri. - kommer fra det greske ordet geo- jord og metron mål.

Høgskolen i Oslo og Akershus. x 1 +3x 2 +11x 3 = 6 2x 2 +8x 3 = 4 18x 1 +5x 2 +62x 3 = 40

Bruk av dedikert programvare for hydrostatiske beregninger

Algoritmer og datastrukturer Kapittel 2 - Delkapittel 2.1

1 Introduksjon GeoGebra 2 Speiling, rotasjon og parallellforskyvning 3 Perspektivtegning 4 Symmetriakser

Moving Objects. We need to move our objects in 3D space.

RF5100 Lineær algebra Leksjon 12

MA-132 Geometri Torsdag 4. desember 2008 kl Tillatte hjelpemidler: Alle trykte og skrevne hjelpemidler. Kalkulator.

Løsning til utvalgte oppgaver fra kapittel 14 (12).

MA1102 Grunnkurs i analyse II Vår 2019

Innledning. Innledning. Skantid,, matrise, bildekvalitet. Skantid. Pixel og Voxel. En enkel sinuskurve. Faseforskyvning

Computer Graphics with OpenGL

INF{3 4}320 - Obligatorisk oppgave 3

Lab 1 Kamerageometri med Eigen

LØSNINGSFORSLAG EKSAMEN TMA4105 MATEMATIKK 2 Lørdag 14. aug 2004

EKSAMENSOPPGAVE. : INF-1400 Objektorientert programmering. Oppgavesettet er på 5 sider inklusiv forside

Eksamen MA-104 Geometri, 22. mai 2006

Stjerner og galakser Nybegynner Python PDF

Steg 1: Vi starter fra toppen

Høgskolen i Oslo og Akershus. c) Et annet likningssystem er gitt som. t Bestem parametrene s og t slik at likningssystemet blir inkonsistent.

RF5100 Lineær algebra Leksjon 1

Øving 3 Determinanter

Oppgaver MAT2500. Fredrik Meyer. 29. august 2014

1 MAT100 Obligatorisk innlevering 1. 1 Regn ut i) iii) ii) Regn ut i) ii)

TFE4120 Elektromagnetisme

Kapittel 7 - Pipe, trapp og innredning... 3

MAT 1110: Obligatorisk oppgave 1, V-07: Løsningsforslag

Forkunnskaper i matematikk for fysikkstudenter. Vektorer.

EKSAMEN I MATEMATIKK 1000

Side 1 av 11

Komplekse tall og komplekse funksjoner

Morfologiske operasjoner på binære bilder

Lineære likningssett.

(t) = [ 2 cos t, 2 sin t, 0] = 4. Da z = 2(1 + t) blir kurva C en helix/ei skruelinje på denne flata (se fig side 392).

MA1201 Lineær algebra og geometri Løsningsforslag for eksamen gitt 3. desember 2007

med canvas Canvas Grafikk Læreplansmål Gløer Olav Langslet Sandvika VGS

Pipe, trapp og innredning... 3

Anvendt Robotteknikk Konte Sommer 2019 EKSAMEN HARIS JASAREVIC

Vektoranalyse TFE4120 Elektromagnetisme

Utfordringer med EUREF

Sprettende ball Introduksjon Processing PDF

EKSAMEN RF3100 Matematikk og fysikk

Fiktive krefter

MEK2500. Faststoffmekanikk 6. forelesning

Løpende strekmann Erfaren Videregående Python PDF

UNIVERSITETET I OSLO Det matematisk-naturvitenskapelige fakultet

LO510D Lin.Alg. m/graf. anv. Våren 2005

GENERELLE VEKTORROM. Hittil har vi bare snakket om vektorrom av type

INF 2310 Digital bildebehandling

Ma Flerdimensjonal Analyse Øving 1

CSS: Animasjon Nybegynner

Transkript:

Programmering grunnkurs TDAT: Grafikkdel Leksjon G: Transformasjoner Fra modell til tegning på skjerm side Modell Plantransformasjoner/translasjon side 3 Modell Plantransformasjoner/skalering side 4 Modell Plantransformasjoner/rotasjon side 5 Modell Transformasjonsligningen på matriseform side 6 Modell 3D-transformasjoner: Homogene koordinater side 7 Modellkoordinatsystem: OpenGL metode-/kommandosyntaks side 8- View koordinatsystem side - Projeksjonstransformasjoner side 3-5 Viewport: Uttegningsindu side 6 Programeksempel: Transformert kube/terning side 7-9 Effekt a parameterendringer. Noen kjørbare eksempler side Programmering grunnkurs TDAT-A Grafikkdelen: Introduksjon til OpenGL med Jaabinding JOGL Jan H. Nilsen Leksjon, side

Fra Modell til tegning på skjerm OpenGL metoder: Steg : gl.gltranslatef(); gl.glrotatef(), gl.glscalef() Steg : glu.glulookat() Steg 3 og 4: gl.gfrustum(), glu.gluperspectie(), gl.glortho(), glu.gluorthod() Steg 5: gl.glviewport() Programmering grunnkurs TDAT-A Grafikkdelen: Introduksjon til OpenGL med Jaabinding JOGL Jan H. Nilsen Leksjon, side

Modell. Plantransformasjoner:Translasjon Tre grunnleggende operasjoner i planet: translasjon, skalering og rotasjon. Translasjon Med translasjon forstår i å flytte, eller parallellforskye, en figur. Vi tar utgangspunkt i et enkelt punkt. Dette er en enkel operasjon som er lett å formulere matematisk. Vi il flytte punktet P til en ny posisjon P. P = (x,y) = (3,3) P = (x,y) = (8,5) Vi ser uten idere at x = x + 5 y = y + Programmering grunnkurs TDAT-A Grafikkdelen: Introduksjon til OpenGL med Jaabinding JOGL Jan H. Nilsen Leksjon, side 3

Modell. Plantransformasjoner: Skalering P = (x,y) = (3,3) Vi "skalerer" punktet ed å multiplisere med en skaleringsfaktor i x-retningen, sx =, og en i y-retningen, sy = 3, og får P=(x,y)=(6,9) Sammenhengen er altså: x = sx x y = sy y Ved skalering a et polygon, il i tillegg til at hjørnepunktene flyttes, også inkler og areal endres. Skalering er uttrykt i forhold til origo Programmering grunnkurs TDAT-A Grafikkdelen: Introduksjon til OpenGL med Jaabinding JOGL Jan H. Nilsen Leksjon, side 4

Modell. Plantransformasjoner: Rotasjon P= (x,y) = (r cos(), r sin()) P= (x,y) = (r cos(+), r sin(+)) sin (+) = cos() sin() + sin() cos() cos (+) = cos() cos() - sin() sin() P = (x,y) = (r cos(), r sin() ) P = (x,y) = (r cos(+), r sin(+)) P = (r cos() cos() - r sin() sin(), r cos() sin() + r sin() cos()) x = r cos() y = r sin() x = x cos() - y sin() y = x sin() + y cos() P = (x,y) = (x cos() - y sin(), x sin() + y cos() Programmering grunnkurs TDAT-A Grafikkdelen: Introduksjon til OpenGL med Jaabinding JOGL Jan H. Nilsen Leksjon, side 5

Modell: Transformasjonsligningene på matriseform De tre basistransformasjonene i D kan beskries ed følgende likningssett: Translasjon bestemt ed tx og ty: x = x+tx, y = y+ty Skalering bestemt ed sx og sy: x = sx x, y = sy y Rotasjon bestemt ed : x = x cos()-y sin(), y = x sin()+y cos() ( = på forrige slide) På matriseform kan disse likningene skries: Translasjon: Skalering: Rotasjon x y x y tx ty x y sx x * sy y x y cos sin Ved bruk a homogene-koordinater blir alle matrisene kadratiske : sin x * cos y x y tx ty x * y x y sx sy x * y x y cos sin sin cos x * y Alle tre basistransformasjonene kan dermed skries på samme form: P = M * P Programmering grunnkurs TDAT-A Grafikkdelen: Introduksjon til OpenGL med Jaabinding JOGL Jan H. Nilsen Leksjon, side 6

Programmering grunnkurs TDAT-A Grafikkdelen: Introduksjon til OpenGL med Jaabinding JOGL Jan H. Nilsen Leksjon, side 7 Modell. Romtransformasjoner: Homogene koordinater 3D-transformasjoner på matriseform: P = M * P Translasjon Skalering gl.gltranslatef(txf,tyf,tzf); gl.glscalef(sxf,syf,szf); * z y x tz ty tx z y x * z y x sz sy sx z y x * cos sin sin cos z y x z y x * cos sin sin cos z y x z y x * cos sin sin cos z y x z y x Rotasjon rundt: Z-aksen X-aksen Y-aksen gl.glrotatef(f,.f,.f,.f) gl.glrotatef(f,.f,.f,.f) gl.glrotatef(f,.f,.f,.f)

Modellkoordinatsystem: OpenGL metode-/kommandosyntaks Translasjon: gl.gltranslate{fd}( Type x, Type y, Type z) Mulitipliserer den gjeldende matrisen med en translasjonsmatrise som forflytter objektet med de angitt Type x, Type y, Type z - erdiene. Figure 3-5 : Translering a et objekt Programmering grunnkurs TDAT-A Grafikkdelen: Introduksjon til OpenGL med Jaabinding JOGL Jan H. Nilsen Leksjon, side 8

Modellkoordinatsystem: OpenGL metode-/kommandosyntaks Rotasjon gl.glrotate{fd}(type angle, TYPE x, TYPE y, TYPE z); Multipliserer den gjeldende matrisen med en rotasjonsmatrise som roterer et objekt en inkel angle i retning mot uriseren rundt aksen gitt ed ektoren fra origo til punktet (TYPE x, TYPE y, TYPE z ) Effekten a gl.glrotatef(45.f,.f,.f,.f), som er en rotasjon på 45 grader mot uriseren, rundt z-aksen er ist i figuren. (,f,,f,.f) angir rotasjonsaksen som her er en enhetsektor fra origo til punktet (,,) på z-aksen. Programmering grunnkurs TDAT-A Grafikkdelen: Introduksjon til OpenGL med Jaabinding JOGL Jan H. Nilsen Leksjon, side 9

Modellkoordinatsystem: OpenGL metode-/kommandosyntaks Skalering gl.glscale{fd}(typex, TYPE y, TYPEz) Multipliserer den gjeldende matrisen med en matrise som strekker, krymper eller speiler et objekt langs aksene i WC. Alle (x,y,z) koordinatene på alle punktene på objektet blir multiplisert med de respektie erdiene angitt i parameterlista til metoden: TYPE x, TYPE y, TYPE z. gl.glscale er den eneste a modelltransformasjonene som endrer størrelse og form på et objekt. Figure 3-7 Viser effekten a gl.glscalef(.f, -.5f,.f). Programmering grunnkurs TDAT-A Grafikkdelen: Introduksjon til OpenGL med Jaabinding JOGL Jan H. Nilsen Leksjon, side

View koordinatsystemet Viewing systemet, beskreet med aksene (u,,n), spesifiserer horfra og hordan i ser objektet, ds. hordan i orienterer et kamerae når i skal ta et bilde a modellobjektet årt. Dette systemet er bestemt ut fra følgende spesifikasjoner a hordan i ser modellen: View Reference Point, VRP, som er et punkt i et plan parallelt med projeksjonsplanet. Vi kan godt tenke på dette planet som projeksjonsplanet. View Reference Normal, VRN, som er en normal til projeksjonsplanet, oppreist i VRP. VRN faller sammen med n-aksen i det nye koordinatsystemet Et øyepunkt som ligger på VRN: Dersom i har en parallellprojeksjon ligger øyepunktet uendelig lang ute på VRN En angielse a ha som er opp, VUP. Dette for å skille VUP fra de to andre aksene, u og. u, gis retninger slik at u,, n definerer et rettinklet høyrehånds koordinatsystem. Programmering grunnkurs TDAT-A Grafikkdelen: Introduksjon til OpenGL med Jaabinding JOGL Jan H. Nilsen Leksjon, side

View koordinatsystemet: glu.glulookat(gldouble eyex, GLdouble eyey, GLdouble eyez, GLdouble centerx, GLdouble centery, GLdouble centerz, GLdouble upx, GLdouble upy, GLdouble upz); glu.glulookat() er sammensatt a gl.gltranslate() og gl.glrotate() metoder. Gir Samme effekt som bruk a glu.glulookat() kan oppnås ed å benytte gl.gltranslate() og eller gl.glrotate() direkte: gl.gltranslatef(.f,.f, -5.f); glu.glulookat(.,., 5.,.,.,.,.,.,.); Programmering grunnkurs TDAT-A Grafikkdelen: Introduksjon til OpenGL med Jaabinding JOGL Jan H. Nilsen Leksjon, side

Projeksjonstransformasjoner: Bestemmer synspyramiden /synsolumet og hordan objektet blir projisert ned på skjermen. OpenGL tilbyr to typer projeksjonstransformasjoner: Perspekti- og ortogonaltransformasjoner. Perspektitransformasjon: gl.glmatrixmode(gl.gl_projection); gl.glfrustum(gldouble left, GLdouble right, GLdouble bottom, GLdouble top, GLdouble near, GLdouble far); Programmering grunnkurs TDAT-A Grafikkdelen: Introduksjon til OpenGL med Jaabinding JOGL Jan H. Nilsen Leksjon, side 3

Perspektitransformasjon: Projeksjonstransformasjoner: Figure 3- : The Perspectie Viewing Volume Specified by glu.gluperspectie() glu.gluperspectie(gldouble foy, GLdouble aspect, GLdouble znear, GLdouble zfar); Programmering grunnkurs TDAT-A Grafikkdelen: Introduksjon til OpenGL med Jaabinding JOGL Jan H. Nilsen Leksjon, side 4

Ortogonaltransformasjoner: Projeksjonstransformasjoner: Figure 3-3 : The Orthographic Viewing Volume spesifisert ed gl.glortho() gl.glortho(gldouble left, GLdouble right, GLdouble bottom, GLdouble top, GLdouble near, GLdouble far); glu.gluorthod(gldouble left, GLdouble right, GLdouble bottom, GLdouble top); -. < z <. (D- bildet projiseres ned på skjermen) Programmering grunnkurs TDAT-A Grafikkdelen: Introduksjon til OpenGL med Jaabinding JOGL Jan H. Nilsen Leksjon, side 5

Viewport:Uttegningsindu Viewport: Angir størrelsen på det rektangulære induet på skjermen der bildet skal presenteres Måles i skjermkoordinater, ds pixler Figure 3-5 : Mapper the Viewing Volume til the Viewport gl.glviewport(glint x, GLint y, GLsizei width, GLsizei height); Eks: Disse to etterfølgende OpenGL-metodekallene il tegne det som ligger innenfor en synspyramide med kadratisk bunnflate, som et kadratisk bilde på skjermen: glu.gluperspectie(myfoy,., mynear, myfar); gl.glviewport(,, 4, 4); Programmering grunnkurs TDAT-A Grafikkdelen: Introduksjon til OpenGL med Jaabinding JOGL Jan H. Nilsen Leksjon, side 6

Programeksempel: Transformert kube/terning import com.sun.opengl.util.glut; priate GLU glu = new GLU(); priate GLUT glut = new GLUT(); /** oid init(glautodrawable gldrawable) */ public oid init(glautodrawable gldrawable) { GL gl = gldrawable.getgl(); gl.glmatrixmode(gl.gl_projection); // Select the projection Matrix gl.glloadidentity(); // Reset the Matrises to Unity alues glu.gluperspectie(6.,.,.,.); // Defines the projection and iewing olume (synspyr) // glu.gluorthod(., 4.,., 4.); // Defines the projection and iewing olume // gl.glortho(., 4.,.,4.,.,.); // Defines the projection and iewing olume gl.glmatrixmode(gl.gl_modelview); gl.glloadidentity(); } // Select the Modeliew Matrix // Reset the ModelView Matrix Programmering grunnkurs TDAT-A Grafikkdelen: Introduksjon til OpenGL med Jaabinding JOGL Jan H. Nilsen Leksjon, side 7

Programeksempel: Transformert kube/terning import com.sun.opengl.util.glut; public oid drawglscene( GLAutoDrawable gldrawable) { GL gl = gldrawable.getgl(); gl.glclear(gl.gl_color_buffer_bit GL.GL_DEPTH_BUFFER_BIT); gl.glloadidentity(); gl.glcolor3f(.f,.f,.f); glu.glulookat(.,.,9.,.,.,.,.,.,.); gl.glrotatef( 45.f,.f,.f,.f ); // 3. M(Rotate) gl.gltranslatef(.f,.f,.f ); //. M(Translate) gl.glscalef(.f,.f,.f ); //. M(Scale) utføres først glut.glutwirecube(3.f); } /** oid display() Draw to the canas. */ // Purely a Jaa thing. Simple calls drawglscene() once GL is initialized public oid display(glautodrawable gldrawable) { GL gl = gldrawable.getgl(); drawglscene(gldrawable); // Calls DrawGLScene3 gl.glflush(); // Tinger tidligere buffrede OpenGL komand. til å utføres med en gang. } Programmering grunnkurs TDAT-A Grafikkdelen: Introduksjon til OpenGL med Jaabinding JOGL Jan H. Nilsen Leksjon, side 8

Programeksempel: Transformert kube/terning Rekkefølgen matriseoperasjonene utføres i har betydning for resultatet: gl.glrotatef( 45.f,.f,.f,.f ); gl.gltranslatef(.f,.f,.f ); gl.gltranslatef(.f,.f,.f ); gl.glrotatef( 45.f,.f,.f,.f ); gl.glscalef(.f,.f,.f ); gl.glscalef(.f,.f,.f ); P = Mr * Mt * Ms * P P = Mt * Mr * Ms * P Programmering grunnkurs TDAT-A Grafikkdelen: Introduksjon til OpenGL med Jaabinding JOGL Jan H. Nilsen Leksjon, side 9

Noen kjørbare eksempler Nate Robins har samlet et fint sett med tutorials som iser effekten a parameterendringer for en rekke metoder. Det er ist eksempler på ulik bruk a tegneprimitier, transformasjoner, projeksjoner, lysposisjoner, interaksjoner mellom lys og materialegenskaper, tåkelegging og tekstur. Last ned og kjør programmene fra web-siden: http://www.xmission.com/~nate/tutors.html Programmering grunnkurs TDAT-A Grafikkdelen: Introduksjon til OpenGL med Jaabinding JOGL Jan H. Nilsen Leksjon, side