GrIP vt9: Föreläsning - D-grafik Yngve Sundblad 9-- D-grafik Yngve Sundblad @kth.se 8-79747 Rum 46, Lindstedtsv.5, plan 6 (vid Torget) DH64 Grafik och Interaktionsprogrammering VT 9 Transformationer, Angel 4.6-4.9 Inom datorgrafik är transformationer den kanske viktigaste formen av operation. De vanligaste transformationerna är linjära och kan skrivas som matriser. Dessa är affina, d.v.s. alla punkter på en linje fortsätter att ligga på linjen efter transformationen, parallella linjer bevaras, och förhållandet mellan avstånd bevaras. Sida
GrIP vt9: Föreläsning - D-grafik Yngve Sundblad 9-- Sida Translation T P P d d T P P d d + + +,,, (d, d) (3, -4) Skalning s s Skalningen sker kring origo. (s, s) (/, /4)
GrIP vt9: Föreläsning - D-grafik Yngve Sundblad 9-- Rotation θ π/4 (45 grader) / * 5 - / *. / * 5 + / * 4.9 cosθ sinθ sinθ cosθ 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. Vi säger att (/w, /w) är de kartesiska koordinaterna (cartesian coordinates). Definition: två punkter är lika om den enas homogena koordinater är en multipel av den andra (har samma kartesiska koordinater). Åtminstone en av de tre koordinaterna måste vara skild från. När w ligger punkten i oändligheten och vi definierar att (, ) då representerar en riktning/vektor. Sida 3
GrIP vt9: Föreläsning - D-grafik Yngve Sundblad 9-- Sida 4 Punkter och riktningar Riktningar (vektorer) och punkter är olika geometriska entiteter och eisterar oberoende av referenskoordinatsstem! 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. Bastransformationsmatriser cos sin sin cos s s d d θ θ θ θ Translation Skalning Rotation I affina transformationer ändras aldrig w-koordinaten.
GrIP vt9: Föreläsning - D-grafik Yngve Sundblad 9-- 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.5 S.5 ( ST ) P.5 ( T ) S P.5 (,) (,) (.5,.5) Eempel Rotera kring en annan punkt än origo: P (, 5), P (4,5), θ π/6 (3 grader) Translation : Rotation: Translation : Totalt: U T R T ( - ) ( 3/ -/ ) ( ) ( 3/ -/ 9/- 3 ) ( -5 ) (/ 3/ ) ( 5 ) (/ 3/ 4-5 3/) ( ) ( ) ( ) ( ) U * (, 5, ) (, 5, ); U * (4, 5, ) (+ 3, 6, ) (,5,) + *( 3/, /, ) Observera att man multiplicerar på matriserna från vänster! Sida 5
GrIP vt9: Föreläsning - D-grafik Yngve Sundblad 9-- Mer om rotationsmatriser I en rotationsmatris är översta -delmatrisen ortogonal, enhetsvektorer med skalärprodukt. Riktningsvektorerna (r,r,) och (r,r,) är de två vektorer som - resp. -aeln är roterade till! Rotationsvinkeln θ, r r cosθ, r -r sinθ Två rotationer: θ η ger rotationen θ+η, lätt att visa, multiplicera ihop, använd cosηcosθ sinηsinθ cos(θ+η) cosηsinθ + sinηcosθ sin(θ+η) r R r r r Skevning (shear) SH SH b a Sida 6
GrIP vt9: Föreläsning - D-grafik Yngve Sundblad 9-- Sida 7 Spegling (reflection) u u u u u u RE Där (u, u ) är riktningsvektorn (med längd ) man speglar igenom. (u, u ) Ickelinjära transformationer Förekommer inte lika ofta som linjära, men är inte alls ovanliga. Eempel: Environment mapping. ) ( ) ( + + + + + + + + z z R R R R t R R R R s
GrIP vt9: Föreläsning - D-grafik Yngve Sundblad 9-- Transformationer av hörn Det vore i praktiken omöjligt i grafik att transformera varje piel för sig. Om vi anvä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. Framebuffer, Angel. Datorminne som lagrar information för pilarna som ska visas på skärmen Grafikkortet hämtar värdena för mängden rött, grönt, och blått för varje piel Strkan hos elektronkanonen anpassas efter värdena R G B R G B 3 R G B R G B 4 5 R G B R G B Sida 8
GrIP vt9: Föreläsning - D-grafik Yngve Sundblad 9-- Pilar Med pielvärde menar man oftast RGBvärdena i framebuffern Antalet bitar för R, G resp. B-värdena bestämmer hur många färger som kan representeras Pilar: 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å nanser. Ger 3 + 3 + 6 färgnanser. Detta är en mcket ovanlig färgkodning idag. Sida 9
GrIP vt9: Föreläsning - D-grafik Yngve Sundblad 9-- Pilar: 8 bitar palett Palett: 4 bitar per post 8 bitar inde Ger 56 samtidiga färger ur 67776 möjliga. Pilar: Color ccling http://www.vo.lu/homepages/phahn/fractals/ccling.htm Shifta färgerna i paletten (oftast med hjälp av ett offsetvärde) Klassisk 8-talseffekt i spel! Sida
GrIP vt9: Föreläsning - D-grafik Yngve Sundblad 9-- Pilar: 6 bitar 6 bitar R G B 5 bitar till R och B, 6 bitar till G eftersom människan uppfattar skillnader i gröna nanser bäst. Ger 5 + 6 + 5 65536 olika färgnanser. Kallas ibland hi-color. Pilar: 4 bitar 4 bitar R G B bte (8 bitar) till R, G, och B. Ger 8 + 8 + 8 67776 olika färgnanser. Kallas ibland true-color, eftersom människan kan uppfatta ungefär så många nanskillnader. Sida
GrIP vt9: Föreläsning - D-grafik Yngve Sundblad 9-- Pilar: 3 bitar 8 röd + 8 grön + 8 blå + 8 alpha 67776 färgnanser + 56 genomskinlighetsnivåer Pilar: mer än 8 bitar per kanal Konverterar du en 4-bitars bild till svartvitt är du tillbaka i 56 färgnanser! Manipulation av bilder kan minska antalet signifikanta siffror eller ge avrundningsfel så att du tappar information Idag används ofta eller 6 bitar per kanal (64 64 bit) Ibland t.o.m. 3 bitar per kanal (8 bit) Sida
GrIP vt9: Föreläsning - D-grafik Yngve Sundblad 9-- Fönstersstem Compositing Sida 3
GrIP vt9: Föreläsning - D-grafik Yngve Sundblad 9-- Compositing Georges Méliès, 98 Lager Bildbuffrar som kombineras ihop piel för piel nedifrån och upp. För varje ntt lager definierar man en funktion som beskriver hur informationen från föregående lager ska kombineras ihop med aktuellt lager. Sida 4
GrIP vt9: Föreläsning - D-grafik Yngve Sundblad 9-- Eempel Eempel Sida 5
GrIP vt9: Föreläsning - D-grafik Yngve Sundblad 9-- I ett spel som "94" används inte linjer. Vilka element består grafiken av? Hur funkar det? Sprite är en term från 8-talet I färgpaletten för en 8- bitarsbild bestämmer man att en av färgerna ska vara genomskinlig Idag använder man alpha-kanalen istället Sprites Sida 6
GrIP vt9: Föreläsning - D-grafik Yngve Sundblad 9-- Sprites + Bilden bggs 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. BitBlt och RasterOp För att kunna fltta objekt i realtid på tidiga rastergrafiska arbetsstationer, t.e. Xero Alto (974) resp CMU Perq (98) hade processorn snabba rasteroperationer, Bit Block Transfer resp RasterOp. Finns även i Java/Swing. De kunde fltta en rektangel i framebufferten till annat läge i logisk samverkan med det som låg där: AND, OR, XOR, REPLACE XOR upprepat användbar vid flttningar, t.e. markör z XOR ; z XOR -> or or Sida 7
GrIP vt9: Föreläsning - D-grafik Yngve Sundblad 9-- Sprites http://www.nes-snes-sprites.com/donkekongcountrnew.html Det blir MÅNGA sprites, ibland en för varje animationsruta! (Donke Kong Countr för SNES hade över tusen, t.e.) Duktiga spritetecknare återanvände bildrutor. Om bitblt-operationen kunde spegla bilderna sparade man mcket minne. Isometriska spel Q*Bert (Arkad) Knight Lore (ZX Spectrum) SimCit (PC) Sida 8
GrIP vt9: Föreläsning - D-grafik Yngve Sundblad 9--.5D Doom En billboard är en polgon som alltid vänder "framsidan" åt kameran. D-grafik i Java AWT - Abstract Windowing Toolkit - with Sunʼs Java 995 Swing - Model-View-Controller GUI Tool released b Netscape 996, Sun 997 import java.awt.*; import java.swing.*; ger tillgång till klasserna Graphics med metoder för att rita geometriska objekt med attribut som färg, XOR mode mm GraphicsD med metoder för att göra affin transformation, klippa, komponera, mm mm Sida 9
GrIP vt9: Föreläsning - D-grafik Yngve Sundblad 9-- D-grafik i Java Transformationer i JavaD GeneralPath p new GeneralPath(); p.moveto(5, 5); p.lineto(5, 5); p.lineto(, ); p.closepath(); g.draw(p); AffineTransform t AffineTransform.getTranslateInstance(, 5); t.rotate(-math.pi/3.); AffineTransform old g.gettransform(); g.transform(t); g.draw(p); g.settransform(old); Sida
GrIP vt9: Föreläsning - D-grafik Yngve Sundblad 9-- Det finns möjlighet att använda lager och maskning i JavaD. Man kan också kombinera ihop primitiver automatiskt med boolska operationer. Stöd för att ladda och rita bitmaps/bilder finns också. Mer om JavaD Registrering res checkin grip9 course join grip9 Sida
GrIP vt9: Föreläsning - D-grafik Yngve Sundblad 9-- Inlämningsuppgift D-grafik med transformationer Flertalet uppgifter matematiskt betonade kring transformationer Finns på kurswebben under fliken Inl.uppg., till @kth.se senast 6 februari p- Sida