2D-grafik. Gustav Taxén

Relevanta dokument
Transformationer. Translation. Skalning. Homogena koordinater. Rotation. 2D-grafik. x y. Inom datorgrafik är transformationer den. Många. bevaras.

Transformationer, Angel

Transformationer i 3D. Gustav Taxén

Programmeringsteknik II - HT18. Föreläsning 6: Grafik och händelsestyrda program med användargränssnitt (och Java-interface) Johan Öfverstedt

Avalanche Studios. OpenGL. Vår teknik. Våra spel. Lite inspiration... Stora, öppna spelvärldar. Sandbox-gameplay. Hög audiovisuell standard

Kurvor och ytor. Gustav Taxén

5 Linjär algebra. 5.1 Addition av matriser 5 LINJÄR ALGEBRA

Kort om klasser och objekt En introduktion till GUI-programmering i Java

I rastergrafikens barndom...gjorde man grafik genom att skriva i ett videominne. Operationer på buffert och pixlar. Idag... Varför grafikkort?

Linjära avbildningar. Låt R n vara mängden av alla vektorer med n komponenter, d.v.s. x 1 x 2. x = R n = x n

Laboration 4: Digitala bilder

1 som går genom punkten (1, 3) och är parallell med vektorn.

Exempel :: Spegling i godtycklig linje.

Föreläsning 14: Grafik & mera händelsehantering

Laboration 3 GUI-programmering

Exempel på användning av arv: Geometriska figurer

Subklasser och arv Inledning till grafik (JFrame och JPanel). Något om interface. Objektorienterad programvaruutveckling GU (DIT011) Subklasser

Frågorna 1 till 6 ska svaras med ett kryss för varje korrekt påstående. Varje uppgift ger 1 poäng. Använd bifogat formulär för dessa 6 frågor.

LYCKA TILL! kl 8 13

UPG5 och UPG8 Miniprojekt 1: 2D datorgrafik

Introduktion till Datalogi DD1339. Föreläsning 2 22 sept 2014

Modul 1: Komplexa tal och Polynomekvationer

TENTAMEN PROGRAMMERING I JAVA, 5P SOMMARUNIVERSITETET

Grafiska pipelinen. Edvin Fischer

{ 1, om i = j, e i e j = 0, om i j.

Exempel :: Spegling i godtycklig linje.

ID1004 Laboration 3, 5-6 November 2012

Denna vecka. Idag. Grafiskt användarsnitt. Vi kommer att se

Digitalitet. Kontinuerlig. Direkt proportionerlig mot källan. Ex. sprittermometer. Elektrisk signal som representerar ljud.

ax + y + 2z = 3 ay = b 3 (b 3) z = 0 har (a) entydig lösning, (b) oändligt många lösningar och (c) ingen lösning.

Kort introduktion till POV-Ray, del 1

Föreläsning i webbdesign. Bilder och färger. Rune Körnefors. Medieteknik Rune Körnefors rune.kornefors@lnu.se

Homogena koordinater och datorgrafik

Veckoblad 1, Linjär algebra IT, VT2010

Veckoblad 3, Linjär algebra IT, VT2010

Spelutveckling 3d-grafik och modellering. Grunder för 3d-grafik Blender Animering

Java: Utvecklingsverktyg, datatyper, kontrollstrukturer

17. Övningar ÖVNINGAR Låt F och G vara avbildningar på rummet, som i basen e = {e 1,e 2,e 3 } ges av. x 1 x 2 2x 2 + 3x 3 2x 1 x 3

Frivillig Java-swing-Graphics-lab Programmeringsteknik MN1 vt02

Geometriska transformationer

732G Linköpings universitet 732G11. Johan Jernlås. Översikt. Repetition. Felsökning. Datatyper. Referenstyper. Metoder / funktioner

Shaders. Gustav Taxén

Föreläsning 13 Linjär Algebra och Geometri I

Tentamen TNM061, 3D-grafik och animering för MT2. Tisdag 3/ kl 8-12 TP51, TP52, TP54, TP56, TP41, TP43. Inga hjälpmedel

1 Linjära ekvationssystem. 2 Vektorer

TDDC30 Programmering i Java, Datastrukturer och Algoritmer Lektion 3

TANA17 Matematiska beräkningar med Matlab

e = (e 1, e 2, e 3 ), kan en godtycklig linjär

TANA17 Matematiska beräkningar med MATLAB för M, DPU. Fredrik Berntsson, Linköpings Universitet. 9 november 2015 Sida 1 / 28

Föreläsning 1 Datastrukturer (DAT037)

Linjär Algebra, Föreläsning 2

TDDC30 Programmering i Java, Datastrukturer och Algoritmer Lektion 3

2s + 3t + 5u = 1 5s + 3t + 2u = 1 3s 3u = 1

SKRIVNING I VEKTORGEOMETRI

Signaler, information & bilder, föreläsning 13

Föreläsning 9-10 Innehåll

SF1624 Algebra och geometri Tentamen med lösningsförslag onsdag, 11 januari 2017

Affina avbildningar och vektorgrafik

KOKBOKEN 1. Håkan Strömberg KTH STH

ITK:P1 Lektion 4. Lektion 4. Lektion 4. Att implementera en spelidé i Java. DSV Peter Mozelius

LINJÄRA AVBILDNINGAR

5.7. Ortogonaliseringsmetoder

Rita Egna Bilder, Timer

TDDC30. Objektorienterad programmering i Java, datastrukturer och algoritmer. Föreläsning 5 Jonas Lindgren, Institutionen för Datavetenskap, LiU

Två designmönster, MVC och Observer/Observable. Objektorienterad programvaruutveckling GU (DIT011)

Rastrering och displayalgoritmer. Gustav Taxén

3D: transformationer:

Banach-Tarskis paradox

c d Z = och W = b a d c för några reella tal a, b, c och d. Vi har att a + c (b + d) b + d a + c ac bd ( ad bc)

Analys o Linjär algebra. Lektion 7.. p.1/65

Vektorgeometri för gymnasister

Signaler, information & bilder, föreläsning 12

Detta dokument är ett exempel, cirka andra hälften av en tentamen för TDA545 Objektorienterad programvaruutveckling

Egenvärden och egenvektorer

Att prova på en enkel Applet och att lära sig olika sätt att hämta data från tangentbordet. Du får även prova på att skapa din första riktiga klass.

UPPSALA UNIVERSITET Matematiska institutionen Styf. Exempeltenta med lösningar Programmen EI, IT, K, X Linjär algebra juni 2004

Vektorgeometri. En vektor v kan representeras genom pilar från en fotpunkt A till en spets B.

M = c c M = 1 3 1

Grafiska pipelinens funktion

3 Man kan derivera i Matlab genom att approximera derivator med differenskvoter. Funktionen cosinus deriveras för x-värdena på följande sätt.

Tentamen för kursen Objektorienterad programvaruutveckling GU (DIT010)

Mer om geometriska transformationer

Vektorgeometri för gymnasister

Efterhand fick vi ett system som vi tyckte var väl anpassat. Vi renskrev kladden (nedan) och började programmera menyerna.

Hej Då, Karel! Programmering. Vårt första Javaprogram. hh.se/db2004. Java. Grundtyper, variabler och arrayer

Linjär algebra på några minuter

ax + y + 4z = a x + y + (a 1)z = 1. 2x + 2y + az = 2 Ange dessutom samtliga lösningar då det finns oändligt många.

TAIU07 Matematiska beräkningar med Matlab

Objektorienterad Programmering (TDDC77)

I Skapa Hej.java och skriv programmet. I Kompilera med javac Hej.java. I Rätta fel och repetera tills du lyckas kompilera ditt program

FÖRSLAG TILL LÖSNINGAR FÖR TENTAMEN I INTERNETPROGRAMMERING MED JAVA, 5p för SY , kl

LÖSNINGSFÖRSLAG Programmeringsteknik För Ing. - Java, 5p

SF1624 Algebra och geometri Tentamen Torsdag, 9 juni 2016

Kungliga Tekniska Högskolan Ämneskod 2D4134 Nada Tentamensdag maj - 19 Tentamen i Objektorientering och Java Skrivtid 5 h

Tentamen ID1004 Objektorienterad programmering April 7, 2015

Shaders. Renderingssystem. Renderingssystem. Renderingssystem. Hårdvara för 3D-rendering. Hårdvara för 3D-rendering

Vektorgeometri för gymnasister

Mer om analytisk geometri

Högskolan Dalarna sid 1 av 7 DI-institutionen Hans-Edy Mårtensson Sten Sundin

Inledning. CTH/GU LABORATION 4 MVE /2017 Matematiska vetenskaper

Transkript:

2D-grafik Gustav Taxén gustavt@csc.kth.se 2D164 Grafik och Interaktionsprogrammering VT 27

Framebuffer Datorminne som lagrar information för pixlarna som ska visas på skärmen Grafikkortet hämtar värdena för mängden rött, grönt nt, och blått för varje pixel Styrkan hos elektronkanonen anpassas efter värdena 1 R G B R G B 2 3 R G B R G B 4 5 R G B R G B

Pixlar Med pixel menar man oftast RGB-värdena i framebuffern Antalet bitar för R, G resp.. B-värdenaB bestämmer hur många färger som kan representeras

Pixlar: : 8 bitar 8 bitar R G B Man tilldelar färre bitar till den blå kanalen eftersom människan har svårare att se skillnader mellan blå nyanser. Ger 2 3 +2 3 +2 2 = 16 färgnyanser. Detta är en mycket ovanlig färgkodning idag.

Pixlar: : 8 bitar palett Palett: 24 bitar per post 8 bitar index 1 1 Ger 256 samtidiga färger ur 16777216 möjliga. 2

Pixlar: : Color cycling http://www2.vo.lu/homepages/phahn/fractals/cycling.htm Shifta färgerna i paletten (oftast med hjälp av ett offsetvärde) Klassisk 8-talseffekt i spel!

Pixlar: : 16 bitar 16 bitar R G B 5 bitar till R och B, 6 bitar till G eftersom människan uppfattar skillnader i gröna nyanser bäst. Ger 2 5 +2 6 +2 5 = 65536 olika färgnyanser. Kallas ibland hi-color.

Pixlar: : 24 bitar 24 bitar R G B 1 byte (8 bitar) till R, G, och B. Ger 2 8 +2 8 +2 8 = 16777216 olika färgnyanser. Kallas ibland true-color, eftersom människan kan uppfatta ungefär så många nyanskillnader.

Pixlar: : 32 bitar 8 röd + 8 + 8 grön + 8 + 8 blå + 8 alpha + 8 alpha 16777216 färgnyanser + 256 genomskinlighetsnivåer

Pixlar: mer än 8 bitar per kanal Konverterar du en 24-bitars bild till svartvitt är du tillbaka i 256 färgnyanser! Manipulation av bilder kan minska antalet signifikanta siffror eller ge avrundningsfel så att du tappar information Idag används nds ofta 12 eller 16 bitar per kanal (16x4 = 64 bit) Ibland t.o.m.. 32 bitar per kanal (128 bit)

Pixlar: : fixed point & floating point Oftast lagrar man i fixed point, d.v.s.,., man använder nder de binära värdena rakt av I vissa fall behöver man representera mycket stora intervall i varje kanal T.ex.. High Dynamic Range Kanalerna representeras med floats, ofta 32 bitar per kanal http://en.wikipedia.org/wiki/ Image:Farcryhdr.jpg

Fönstersystem För att göra det enklare för programmeraren har oftast varje fönster en egen "framebuffer". Dessa kombineras sedan ihop i den "riktiga" riktiga" framebuffern.

Om vi förutsätter att vi kan rita linjer kan vi återskapa "Asteroids"! Men vad behöver vi mer?

Transformationer Inom datorgrafik är transformationer den kanske viktigaste formen av operation. De vanligaste transformationerna är linjära och kan skrivas som matriser. Många är också affina, d.v.s. alla punkter på en linje fortsätter tter att ligga på linjen efter transformationen, parallella linjer bevaras, och förhållandet mellan avstånd bevaras.

Translation Translation T P P d d T y x P y x P d y y d x x y x y x + = = = = + = + = ', ' ' ', ', '

Skalning x' y' = s x s y x y Skalningen sker kring origo.

Rotation x' y' cosθ sinθ x = sinθ cosθ y Rotationen sker kring origo.

Homogena koordinater Det vore bra om vi kunde skriva alla dessa transformationer på ett konsekvent sätt. Det funkar om vi inför en tredje koordinat w. Definition: två punkter är lika om den ena är en multipel av den andra. Axiom: Åtminstone en av de tre koordinaterna måste vara skild från. Vi säger att (x/w, y/w) är de kartesiska koordinaterna (cartesian coordinates). När w = ligger punkten i oändligheten och vi definierar att (x, y) då representerar en riktning/vektor.

Punkter och riktningar y Riktningar (vektorer) och punkter är olika geometriska entiteter och existerar oberoende av referenskoordinatsystem! Men de kan definieras i förhållande till ett sådant. Och vi behöver ett för att kunna specificera dem med siffror. x

Transformationsmatriser Transformationsmatriser = = = 1 1 cos sin sin cos 1 ' ' 1 1 1 ' ' 1 1 1 1 1 ' ' y x y x y x s s y x y x d d y x y x y x θ θ θ θ Translation Skalning Rotation I affina transformationer ändras aldrig w-koordinaten.

Kombination av transformationer Vi kan nu kombinera transformationer genom att multiplicera ihop matriserna! Men resultatet kan bli olika om man vänder på ordningen! T S = = 1 1.5 1 1 1.5 1 ( ST ( T ) P S) P = = 1 1 1 1.5 1.5 1 (1,1) (1,1) (1.5,1.5)

Exempel Rotera kring en punkt annan än origo:

Mer om rotationsmatriser Om R är en rotationsmatris är den översta 2x2- delmatrisen ortogonal. Riktningsvektorerna (r 11,r 21,) och (r 12,r 22,) är de två vektorer som x- resp. y- axeln är roterade till! R = r r 11 21 r r 12 22 1

Skevning (shear) SH SH x y = = 1 1 b a 1 1 1 1

Spegling Spegling (reflection) (reflection) = 1 1 2 2 2 1 2 2 2 y y x y x x u u u u u u RE Där (u x, u y ) är riktningsvektorn (med längd 1) man speglar igenom.

Ickelinjära transformationer Förekommer inte lika ofta som linjära ra,, men är inte alls ovanliga. Exempel: : Environment mapping. s = 2 R 2 x + R R 2 y x + ( R z + 1) 2 + 1 2 t = 2 R 2 x + R R 2 y y + ( R z + 1) 2 + 1 2

Transformationer av hörn Det vore i praktiken omöjligt i 3D-grafik att transformera varje pixel för sig. Om vi använder nder linjära transformationer räcker det dock att transformera hörnen och binda samman dem med linjer! Man interpolerar sedan data definierad i hörnen linjärt över primitiverna. Om det är färg man interpolerar brukar det kallas Goraud shading.

I ett spel som "1942" används inte linjer. Vilka element består grafiken av? Hur funkar det?

Compositing

Compositing Georges Méliès, tidigt 19-t.

Compositing http://www.cdisweden.com/

Lager Bildbuffrar som kombineras ihop pixel för pixel nedifrån och upp. För varje nytt lager definierar man en funktion som beskriver hur informationen från föregående lager ska kombineras ihop med aktuellt lager.

Exempel

Exempel

Exempel

Exempel

Sprites Monkey Island 3 (PC) 1942 (Arkad)

Sprites Sprite är en term från 8-talet I färgpaletten för en 8-8 bitarsbild bestämmer man att en av färgerna ska vara genomskinlig Idag använder nder man alpha-kanalen istället

Sprites + = Bilden byggs upp i lager, nerifrån och upp. I många äldre datorer fanns en operation för att snabbt "sprite"-kopiera från minne till framebuffer, s.k. bitblt. Vissa maskiner kunde skala och rotera sprites vid utritningen. Ibland fanns stöd för kollisionsdetektion sprites emellan.

Sprites http://www.nes-snes-sprites.com/donkeykongcountrynew.html Det blir MÅNGA sprites, ibland en för varje animationsruta! (Donkey Kong Country för SNES hade över tusen, t.ex.) Duktiga spritetecknare återanvände bildrutor. Om bitblt-operationen kunde spegla bilderna sparade man mycket minne.

Lager och sprites Monkey Island 3 (PC)

Pseudo-3D Out Run (Arkad)

Parallax-scrolling Moon Patrol (Arkad)

Isometriska spel Q*Bert (Arkad) Knight Lore (ZX Spectrum) SimCity 2 (PC)

2.5D Doom En billboard är en polygon som alltid vänder "framsidan" åt kameran.

2D-grafik i Java import java.awt.*; import javax.swing.*; public class GrafikTest extends JFrame { public void paint(graphics g) { g.drawstring("hello", 1, 5); } } public static void main(string[] args) { GrafikTest f = new GrafikTest(); f.settitle("grafiktest"); f.setsize(3, 3); f.setvisible(true); }

2D-grafik i Java import java.awt.*; import javax.swing.*; import java.awt.geom.*; public class Java2D extends JFrame { public void paint(graphics g) { Graphics2D g2 = (Graphics2D) g; g2.setrenderinghint(renderinghints.key_antialiasing, RenderingHints.VALUE_ANTIALIAS_ON); BasicStroke bs = new BasicStroke(1); g2.setstroke(bs); GeneralPath p = new GeneralPath(); p.moveto(5, 5); p.lineto(15, 5); p.lineto(2, 1); p.closepath(); g2.draw(p); } } public static void main(string[] args) { Java2D f = new Java2D(); f.settitle("java2d"); f.setsize(3, 3); f.setvisible(true); }

2D-grafik i Java

Transformationer i Java2D GeneralPath p = new GeneralPath(); p.moveto(5, 5); p.lineto(15, 5); p.lineto(2, 1); p.closepath(); g2.draw(p); AffineTransform t = AffineTransform.getTranslateInstance(1, 15); t.rotate(-math.pi/3.); AffineTransform old = g2.gettransform(); g2.transform(t); g2.draw(p); g2.settransform(old);

Mer om Java2D Det finns möjlighet att använda nda lager och masking i Java2D. Man kan också kombinera ihop primitiver automatiskt med boolska operationer. Stöd för att ladda och rita bitmaps/bilder bilder finns också.