Forelesningsnotater SIF8039/ Grafisk databehandling Notater til forelesninger over: Kapittel 5: ”Viewing” i: Edward Angel: ”Interactive Computer Graphics” Vårsemesteret 2002 Torbjørn Hallgren Institutt for datateknikk og informasjonsvitenskap Norges teknisk-naturvitenskapelige universitet
Behandlet hittil Generelt om grafiske system Interaksjon i grafiske systemer Modelleringstransformasjoner Modellering med OpenGL (selvstudium)
Neste tema Avbildning: Projeksjonsmetoder Posisjonering av (syntetisk kamera) kamera Spesifikasjon av betraktningsvolum Klipping Avbildningstransformasjonene
Projeksjonsmetoder Oppgave: Begrensning: Avbilde 3D objekter på en 2D flate 3D 2D avbildningstransformasjon Begrensning: Planare projeksjoner Hovedklasser av planare projeksjoner: Parallellprojeksjoner Perspektiviske projeksjoner
Parallellprojeksjoner Projeksjonsplan Objekt Bilde Punktene til objektet projiseres langs parallelle linjer Spesifiseres ved projeksjonsplan og projeksjonsretning
Parallellprojeksjoner Ortografiske parallellprojeksjoner Projeksjonsretningen er ortogonal til projeksjonsplanet Projeksjoner i plan som er vinkelrette på koordinataksene Maskintegninger - målriktighet Aksonometriske projeksjoner Projeksjonsplanet står skjevt i forhold til to eller tre akser Dimetriske projeksjoner Trimetriske projeksjoner Isometriske projeksjoner (en spesiell trimetrisk projeksjon) Rørtegninger Skjeve parallellprojeksjoner
Ortografiske projeksjoner
Aksonometriske projeksjoner
Isometriske projeksjoner En trimetrisk projeksjon der projeksjonsplanet skjærer alle tre akser i samme avstand fra origo Linjer parallelle med koordinataksene sees under samme vinkel (er likt ”forkortet”) Lengder finnes ved multiplikasjon med en fast faktor
Skjeve parallellprojeksjoner
Perspektiviske projeksjoner Projeksjonsplan Objekt Projeksjons- senter Bilde Punktene til objektet projiseres langs linjer som samles i et projeksjonssenter Spesifiseres ved projeksjonsplan og projeksjonssenter
Perspektiviske transformasjoner Egenskaper: Parallelle linjer som er parallelle med projeksjons-planet, forblir parallelle Parallelle linjer som ikke er parallelle med projek-sjonsplanet, samles i et forsvinningspunkt (som representerer uendelig langt borte) Forsvinningspunktene gitt når projeksjonsplan og projeksjonssenter er gitt Ingen grense for antall mulige forsvinningspunkter Brukes for å bidra til realistisk utseende bilder
Perspektivprojeksjoner Trepunkts Topunkts Enpunkts
En-punkts perspektivprojeksjon Ett forsvinningspunkt
Topunkts perspektivprojeksjon To forsvinningspunkt
Trepunkts perspektivprojeksjon Tre forsvinningspunkt
Perspektivisk transformasjon y (x,y,z) (xp,yp,zp) z d Projeksjonssenter (COP) Projeksjonsplanets skjæringspunkt med z-aksen x d er negativ
Perspektivisk projeksjon y (x,y,z) (xp,yp,zp) z d
Homogene koordinater Ser på: som et punkt i et fire- dimensjonalt rom med homogene koordinater x, y, z og w med w=1. Er en linje i det firedimensjonale rommet De kartesiske koordinatene ligger i planet w=1: Kartesiske koordinater:
Perspektivisk projeksjon Perspektivprojeksjonen slik vi har spesifisert den, representeres med matrisen: Vi får: som gir de kartesiske koordinatene:
Ortografisk transformasjon y (x,y,z) (xp,yp,zp) z Projeksjonsplanet er x-y-planet x
Ortografisk projeksjon Projeksjonen er: Matrisen for ortografisk projeksjon er som her:
Posisjonering av kameraet Flytte kameraet i forhold til scenen? Transformere fra verdenskoordinatsystemet til kamerakoordinatsystemet Eller: Flytte scenen i forhold til kameraet? Flytte scenen i kamerakoordinatsystemet SAMME TRANSFORMASJONSMATRISE I BEGGE TILFELLE
Posisjonering av kameraet PHIGS’s metode: Bestemme projeksjonssenter Bestemme synsretning (normalen til projeksjons-planet) Bestemme ”viewup”-vektor Dette fastlegger kamerakoordinatsystemet entydig
Posisjonering av kameraet z v VUP u n VPN COP y 1 Center Of Projection 2 View Plane Normal 3 View Up Vector 4 u-axis x
Posisjonering av kameraet Posisjonen til origo i kameraets koordinatsystem: Projeksjonsplannormalen og ”viewup”-vektoren:
Koordinatakser i kamerasystemet Har n-aksen (svarende til z-aksen) i retning vektoren n: Søker v-aksen (svarende til y-aksen): n vup Projeksjonsplanet v Søker u-aksen (svarende til x-aksen):
Enhetsvektorer i akseretningene Enhetsvektorer for akseretningene i uvn-systemet (kamerakoordinatsystemet):
Koordinater i kamerasystemet Translasjon av kamerakoordinatsystemets origo til verdenskoordinatsystemets origo: Rotasjon slik at kamerakoordinatsystemets akser faller sammen med verdenskoordinatsystemets akser:
Koordinater i kamerasystemet Transformasjon av koordinatrepresentasjoner i verdens- koordinatsystemet til koordinatrepresentasjoner i kamera- koordinatsystemet:
Posisjonering av kameraet PHIGS: evaluate_ViewOrientationMatrix viewRefPoint viewPlaneNormal viewUpVector OpenGL: gluLookAt øyepunkt referansepunkt (”siktepunkt”) i scenen ”viewup”-vektor
Betraktningsvolum bakplan Skjev parallellprojeksjon y (xmin,ymin) (xmaks,ymaks) bilde frontplan betraktningsvolum (view volume) x z projeksjonsplan
Kanonisk betraktningsvolum for skjev parallell- projeksjon transformeres til kanonisk betraktnings- volum Terningen begrenset av planene: y x z Enkelt å: - klippe - fjerne skjulte flater - projisere
Skjærtransformasjonen y x
Oppretting av skjevhet zbak zbak zfor zfor xmin xmaks ymin ymaks x y z z Vinklene og er gitt av projeksjonsretningen 1. Translere hjørnet (xmin, ymin, zfor) til origo 2. Opprette skjevheten med en skjærtransformasjon 3. Translere tilbake
Oppretting av skjevhet Skjærtransformasjon: Den komplette opprettingstransformasjonen blir:
Oppretting av skjevhet Ferdig multiplisert:
Kanonisk betraktningsvolum zbak zfor x z xmin xmaks 1. Translere midtpunktet i betraktningsvolumet til origo 2. Skalere til kanonisk betraktningsvolum
Kanonisk betraktningsvolum Translasjon: Skalering:
Kanonisk betraktningsvolum Konkatenert:
Avbildning på skjermen View- port Høyde (xnvhj,ynvhj) Bredde Skjerm
Avbildning på skjermen Det kanoniske betraktningsvolumet projiseres ortografisk inn i frontplanet med transformasjonen: Frontplanet avbildes i ”viewport” med transforma-sjonen Mviewport
Viewport-transformasjonen Transformasjonen består av en skalering til viewportens størrelse og form etterfulgt av en transformasjon (translasjon) til skjermkoordinater:
Parallellprojeksjon - komplett Komplett avbildningstransformasjon for parallell- projeksjon:
Komplett transformasjonsbilde Komplett transformasjonsbilde ved parallellprojeksjon: glViewport glOrtho Ikke støttet i OpenGL gluLookAt Basistransformasjoner
Betraktningsvolum (xmaks,ymaks) Perspektivprojeksjon bakplan y (xmin,ymin) bilde frontplan betraktningsvolum (view volume) x z projeksjonsplan
Betraktningsvolum Synsvinkel i x-retningen gitt ved : y aspektforhold z betraktningsvolum Perspektivisk betraktningsvolum kan også spesifiseres ved hjelp av synsvinkel
Normalisering Et perspektivisk betraktningsvolum i form av et skjevt frustrum, omgjøres til et terningformet kanonisk betraktningsvolum med følgende operasjoner: Oppretting av skjevheten (skjærtransformasjon) Omforming til et normalisert frustrum (skalering) Transformasjon fra frustrum til terning
Oppretting av skjevhet Betraktningsvolum zbak zfor xmaks xmin x z Retter opp med skjærtransformasjon
Oppretting av skjevhet Skjevheten rettes fullstendig opp med transformasjonen: OBS! Både z og zfor vil her være negative.
Oppretting av skjevhet y (x’maks,y’maks) (xmaks,ymaks) x Etter oppretting (x’min,y’min) Før oppretting (xmin,ymin) OBS: x’maks - x’min = xmaks - xmin y’maks - y’min = ymaks - ymin Utnyttes i påfølgende skalering
Kanonisk betraktningsvolum Kanonisk betraktningsvolum for perspektivprojeksjon: y z’bak=z’min (1,1,-1) (-1,-1,-1) x z
Kanonisk betraktningsvolum Skalering til kanonisk betraktningsvolum for perspektivisk projeksjon: y (x’maks,y’maks,zfor) 2 (1,1,-1) x 2 (-1,-1,-1) (x’min,y’min,zfor)
Kanonisk betraktningsvolum Skalering til kanonisk betraktningsvolum for perspektivisk projeksjon:
Kanonisk betraktningsvolum Kanonisk betraktningsvolum for perspektivprojeksjon: z=z’bak z=x z=-1 z=-x x -1 1 z Kanoniserer med skaleringstransformasjon
Perspektiv parallell Søker transformasjon som omformer et kanonisk betraktningsvolum for perspektivprojeksjon til et kanonisk betraktningsvolum for parallellprojeksjon. Vi stiller følgende krav: Siden skal transformeres til x = z x = -1 x = -z x = 1 y = z y = -1 y = -z y = 1 x- og y-koordinatene skal ikke påvirke transformasjonen av z-koordinaten
Kanonisk betraktningsvolum Terningen begrenset av planene: Konverterer kanonisk betraktningsvolum for perspektivisk projeksjon til kanonisk betraktnings- volum for parallell- projeksjon y x z
Perspektiv parallell Følgende matrise tilfredsstiller disse kravene: Videre forlanger vi at: Planet skal transformeres til z = -1 z = 1 z = z’bak z = -1 der: z’bak = - zbak / zfor
Perspektiv parallell Dette gir:
Perspektiv parallell Vi får:
Normalisering - komplett Den fullstendige normaliseringen fra skjevt frustrum (avkortet pyramide) til terningformet kanonisk betraktningsvolum blir som følger:
Perspektivprojeksjon - komplett Komplett avbildningstransformasjon for perspektivisk projeksjon: Til sammenlikning:
Normalisering - komplett Utledningen av Mfrus->par slik det er gjort her, representerer den vanlige og mest ”bent fram” måten å gjøre det på OpenGL anvender en litt annen variant av matrisen Det eksisterer en enkel forbindelse mellom OpenGL’s versjon og den som er presentert her Læreboka utleder (med diverse feil under veis og i sluttsvaret) OpenGL’s versjon
En alternativ matrise Vi kan danne en ny (og kanskje litt enklere) matrise ved multiplikasjon med faktoren -zfor: Hvordan har det seg at denne matrisen er gjør samme nytten som den opprinnelige!!!???
En alternativ matrise Vi arbeider med homogene koordinater Vi kan skalere alle ledd i en homogen transforma-sjonsmatrise med samme faktor uten at dette påvirker de resulterende kartesiske koordinatene (x,y,z) som kommer fram av de homogene koordinatene (x’,y’,z’,w): Skalering av matrisens ledd resulterer i lik skalering av teller og nevner
OpenGL’s matrise OpenGL projiserer ortografisk inn i planet z = -1 i stedet for i planet z = 1 slik utledningen her legger opp til Dette har først og fremst betydning når det skal avgjøres hvilke flater som er synlige i bildet, og hvilken farge flatene skal ha Vi får OpenGL’s matrise ved å reflektere vår matrise M’frus->par i planet z = 0
OpenGL’s matrise
OpenGL’s matrise OpenGL’s matrise kan utledes direkte ved å gjøre et par av valgene underveis i prosessen litt annerledes: Unnlate skaleringen i z-retningen ved transformasjonen til kanonisk betraktningsvolum for perspektivisk projeksjon: Vrenge det perspektiviske betraktningsvolumet ved transformasjonen til terningform: Planet transformeres til i stedet for z = zfor -1 1 z = zbak 1 -1
Komplett transformasjonsbilde Komplett transformasjonsbilde ved perspektivprojeksjon: glViewport glFrustrum gluLookAt Basistransformasjoner
Komplett transformasjonsbilde Komplett transformasjonsbilde ved parallellprojeksjon: glViewport glOrtho Ikke støttet i OpenGL gluLookAt Basistransformasjoner