Utmatningstekniker Vektoriserade (linjeritande) skärmar

Relevanta dokument
Grafiska System APIer mm. Innehåll Grafiska System en intro Primitiver Inmatning Grafik-APIer Exempel Java OpenGL. Grafikprogrammering.

OOMPA 2D1359 Föreläsning 3

Java: Utvecklingsverktyg, datatyper, kontrollstrukturer

Java: kort introduktion. Trådar. Något om mutex, Dekkers algoritm och monitorer. Javas ("inbyggda monitor") synchronized.

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

Objektorienterad Programkonstruktion. Föreläsning 3 7 nov 2016

Objektorienterad Programkonstruktion. Föreläsning 3 9 nov 2015

ITK:P1 Föreläsning 4. Grafiska gränssnitt i Java. AWT-komponenter

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

Föreläsning 15 (16) Historik (java.awt) Historik (javax.swing) Introduktion till Swing

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

Arv. Fundamental objekt-orienterad teknik. arv i Java modifieraren protected Lägga till och modifiera metoder med hjälp av arv Klass hierarkier

Arv: Fordonsexempel. Arv. Arv: fordonsexempel (forts) Arv: Ett exempel. En klassdefinition class A extends B {... }

2I1049 Föreläsning 8. Grafiska gränssnitt i Java. AWT-komponenter. Grafiska gränssnitt, Java interface och händelsehantering

TDDC30 Programmering i Java, Datastrukturer och Algoritmer Lektion 3

ID1004 Laboration 3, 5-6 November 2012

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

TDDC30 Programmering i Java, Datastrukturer och Algoritmer Lektion 3

TDDE10 m.fl. Objektorienterad programmering i Java Föreläsning 7 Erik Nilsson, Institutionen för Datavetenskap, LiU

Laboration 3 GUI-programmering

Grundläggande programmering, STS 1, VT Sven Sandberg. Föreläsning 18

Idag. statiska metoder och variabler. private/public/protected. final, abstrakta klasser, gränssnitt, delegering. wrapper classes

Ingenjörsfirman Stéen Java Sida 1 av 1

DD2385 Programutvecklingsteknik Några bilder till föreläsning 1 24/ Kursöversikt Javarepetition/Javaintroduktion

Klasshierarkier - repetition

Föreläsning 8 - del 2: Objektorienterad programmering - avancerat

Dagens program. Programmeringsteknik och Matlab. Objektorienterad programmering. Vad är vitsen med att ha både metoder och data i objekten?

JAVA Mer om klasser och objektorientering

Föreläsnings 11 - GUI, Händelsestyrda program, MVC

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

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

(Man brukar säga att) Java är... Denna föreläsning. Kompilering av Java. Historik: Java. enkelt. baserat på C/C++ Allmänt om Java

Objektorienterad programmering i Java. Föreläsning 5 Kort om Java-Applets

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

I STONE. I Variabler, datatyper, typkonvertering. I Logiska och matematiska uttryck. I Metoder-returvärde och parametrar. I Villkorssatser if/else

Imperativ programmering. Föreläsning 4

Programmering med Java. Grunderna. Programspråket Java. Programmering med Java. Källkodsexempel. Java API-exempel In- och utmatning.

TDDD78, TDDE30, 729A Grafik: Att "rita" egna komponenter

Laboration 1: Figurer i hierarki

TENTAMEN PROGRAMMERING I JAVA, 5P SOMMARUNIVERSITETET

DI-institutionen Sid 1 av 6 Hans-Edy Mårtensson Sten Sundin

NetBeans 7. Avsikt. Projektfönster

DAT043 - föreläsning 8

2I1049 Föreläsning 5. Objektorientering. Objektorientering. Klasserna ordnas i en hierarki som motsvarar deras inbördes ordning

Eclipse. Avsikt. Nu ska ett fönster liknande figuren till höger synas.

Vad är ett objekt? Tillstånd och beteende. Vad är ett objekt? Exempel

Objektorienterad programmering med Java Swing: Händelser, lyssnare och applets

Objektorienterad Programkonstruktion, DD1346 FACIT. Tentamen , kl

EDAA20 Programmering och databaser. Mål komprimerat se kursplanen för detaljer. Checklista. Föreläsning 1-2 Innehåll. Programmering.

Klasshierarkier. Klasser kan byggas på redan definierade klasser

Objektorienterad Programkonstruktion. Föreläsning 6 23 nov 2015

Lab5 för prgmedcl04 Grafik

Objektorienterad Programmering DAT043. Föreläsning 5 29/1-18 Moa Johansson (delvis baserat på Fredrik Lindblads material)

DUGGA: Objektorienterade applikationer. Läs detta! Uppgifterna är inte avsiktligt ordnade efter svårighetsgrad.

2I1049 Föreläsning 9. Iterativ programutveckling. Iterativ programutveckling. Modularisering, återanvändning och JavaBeans

DI-institutionen Sid 1 av 5 Hans-Edy Mårtensson Sten Sundin Micael Karlsson

Idag. Javas datatyper, arrayer, referenssemantik. Arv, polymorfi, typregler, typkonvertering. Tänker inte säga nåt om det som är likadant som i C.

Kompilera och exekvera Javakod

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

Föreläsning 5-6 Innehåll. Exempel på program med objekt. Exempel: kvadratobjekt. Objekt. Skapa och använda objekt Skriva egna klasser

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

2203$( Föreläsning ii - Mer om Java bla this och konstruktorer. Exempel: lampa

Lektion Händelsehanterare

Föreläsning 5-6 Innehåll

TDDE10 m.fl. Objektorienterad programmering i Java Föreläsning 6 Erik Nilsson, Institutionen för Datavetenskap, LiU

Varför behövs grafikbibliotek? Introduktion till OpenGL. OpenGL är ett grafikbibliotek. Fördelar med OpenGL. Allmänt om OpenGL. Nackdelar med OpenGL

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.

Frivillig Java-swing-Graphics-lab Programmeringsteknik MN1 vt02

Vem är vem på kursen. Objektorienterad programvaruutveckling GU (DIT011) Kursbok Cay Horstmann: Big Java 3rd edition.

Exempel på användning av arv: Geometriska figurer

Fortsättningskurs i programmering F 5. GUI händelsehantering - undantagshantering Hugo Quisbert AWT. Paket för hantering av grafik

Övning 1. Datateknik A, Java I, 5 poäng. Att ladda hem och installera Java Att skriva ditt första Javaprogram Att kompilera och exekvera ditt program

Att använda Java SE JDK 6

Objektorienterad programmering med Java Swing. Programexempel. Swing och AWT AWT. = Abstract windowing toolkit

UML. Objekt-orienterad programmering och design (DIT952) Niklas Broberg, 2016

Objektorienterad programmering

TDDE10 m.fl. Objektorienterad programmering i Java Föreläsning 6 Erik Nilsson, Institutionen för Datavetenskap, LiU

Målen med OOSU. Objektorienterad programmering. Objektorienterad programmering. Karlstads Universitet, Johan Öfverberg 1

Konstruktion av klasser med klasser

Tentamen. Datalogi I, grundkurs med Java 10p, 2D4112, Lördagen den 30 november 2002 kl , salar E33, E34

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

2D-grafik. Gustav Taxén

Arrayer. results

Objektorienterad Programkonstruktion. Föreläsning 4 8 nov 2016

Föreläsning 2 Verktyg m.m.

DAT043 - Föreläsning 7

Objektorientering. Objekt och metoder. Objektorientering. Viktiga begrepp. Klass. Objekt. Deklarativ programmering

Verktyg och Utvecklingsmiljö. Jochim von Hacht

Programmering för språkteknologer II, HT2011. Rum

Kort repetition. Programmeringsteknik för Bio1 och I1. Vad ska vi lära oss idag? Ett exempel

Tentamen. 2D4135 vt 2005 Objektorienterad programmering, design och analys med Java Lördagen den 28 maj 2005 kl

Introduktion. Klasser. TDP004 Objektorienterad Programmering Fö 2 Objektorientering grunder

kl Tentaupplägg

Objektorienterad programmering Föreläsning 6. Mer om klasser och typer Namnrymder Inkapsling Synlighet Statiska variabler Statiska metoder

Laboration 10 - Eclipse

Tentamen i Grundläggande programmering STS, åk 1 fredag

Arv och polymorfi. Lite terminologi; Basklass eller superklass: En klass som fungerar som bas för vårt arv. Vi skapar nya klasser utifrån den.

Modelsvar för Tentamen för Objektorienterad programvaruutveckling, TDA545

Transkript:

previous 2D-grafik. Något om FrameWorks. Java en kort introduktion och något exempel med AWT, något om Swing och Graphics2D, samt OpenGL ett litet exempel Föreläsning 2 Innehåll Något om utmatning hårdvara, tekniker och modeller rastergrafik, primitiver och attribut Java mini-introduktion Vi tittar också på Tutorialen om 2D-grafik från Sun (http://java.sun.com/docs/books/tutorial/2d/index.html) Vi luktar på ett par IDEer, Eclipse och JBuilder Vi gör ett litet 2D-exempel i OpenGL next Utmatningstekniker Vektoriserade (linjeritande) skärmar var ganska vanliga fram till en bit in på 80-talet utritning sker genom att linje för linje i en slumpmässig ordning ritas ut på skärmen, därför den engelska termen random scan kunde rita linjer mellan godtyckliga punkter på skärmen Refresh rate Skärmens fosforyta efterlyser endast en viss tid måste uppdateras flera gånger i sekunden (typiskt 30-70) för att undvika flimmer. previous next 2 Rasterskärm Interlacing (sve. radsprång) skärmen uppbyggd som en bitkarta varannan sveplinje uppdateras i varje svep bilderna lagras i en speciell refresh buffer Raster hela bilden skapas från ett raster, som är en uppsättning horisontella svep-linjer bra för skärmar med låg uppdateringshastighet (med typiskt 30 ggr per sekund). Reducerar flimmer. previous next 3 previous next 4 Monokrom skärm Exempel bitkarta till bild (från VisualWorks) ritar med två färger Pixmap (pixel map), bitkarta en representation av en rektangulär area med en vektor av punkter bestående av heltal Namnet pixmap kan betyda både innehållet i refreshbufferten och buffertens minne. För att inte skapa förvirring brukar det senare kallas för frame buffer. 0000000000000000 0100000000000000 0110000000000000 0111000000000000 0111100000000000 0111110000000000 0111111000000000 0111111100000000 0111110000000000 0111110000000000 0100110000000000 0000011000000000 0000011000000000 0000001100000000 0000001100000000 0000000000000000 Cursor normal 0000000110000000 0001101001110000 0010011001001000 0010011001001010 0001001001001101 0001001001001001 0110100000001001 1001100000000001 1000100000000010 0100000000000010 0010000000000010 0001000000000100 0001000000000100 0000100000001000 0000010000001000 0000010000001000 Cursor hand previous next 5 previous next 6

Svepkonvertering/rastrering (matematiska) (linje-)beskrivningar översätts till rasterpunkter Aliasing en term från signalprocessing för fel som uppstår då en kontinuerlig signal diskretiseras I grafiska sammanhang syns detta genom att räta linjer blir trappor. y = mx + b R2 R 2 = x 22 + y 22 previous next 7 previous next 8 Antialiasing tekniker för att reducera aliasing-effekter vanlig teknik är att låta intensiteten vara proportionell mot hur mycket en viss rasterpunkt befinner sig inom den ideala linjen Utan antialiasing Antialiasing Frameworks (FW) Ett FW är centralt för konstruktion av interaktiva applikationer Varför ett framework? Svårt att tränga in i toolkits (bibliotek av komponenter), eller följa givna designregler Ett FW ger återanvändbar applikationsdesign eller delsystem Ett FW representeras av ett antal abstrakta klasser och definitioner av hur dessa klasser samarbetar, vilket vägleder programutvecklaren och gör det enklare att konstruera enhetliga gränssnitt och applikationer snabbare mer uniformt previous next 9 previous next 10 Vad är ett Framework? Ett framework beskriver hur ett problem skall brytas ner Inte bara klasserna utan också hur deras instanser samverkar definierar invarianter som objekten måste dela och anger också hur dom skall användas Hollywood Omvänd kontroll (Hollywood-principen) Ring inte oss vi ringer er! Koda med klassbibliotek Användarkod Koda med framework Framework Ett framework påtvingar en modell som programmeraren måste anpassa sig till kod i klassbibliotek användarkod previous next 11 previous next 12

Grafiskt Framework Ett grafiskt system fungerar ofta som ett framework i vilket man infogar egna applikationer Man anropar initieringsrutiner sätter upp anrop till egna rutiner (call-backs) huvudlooprutin (som sedan anropar dom tidigare definierade call-back-rutinerna) Penplottermodell (alt sköldpaddsgrafik) En vanlig modell för 2D-grafik är penplottermodellen Baseras i huvudsak på man kan flyttar en penna som antingen ritar om vidrör pappret eller bara byter position om den är lyft Används bla av LOGO GKS PostScript Passar ej bra för 3D eller högre dimensioner previous next 13 previous next 14 Koordinatsystem och koordinater Vanligen jobbar vi i Cartesiska koordinater Vissa system har origo nere till vänster andra uppe till vänster Världskoordinater Är dom koordinater vi använder i våra applikationer Här bryr vi inte oss om vilka pixlar på skärmen som kommer representera dem Skärmkoordinater De koordinater som verkligen representerar punkter på skärmen previous next 15 Vanliga ritrutiner och attribut Dom flesta grafiska paket innehåller åtminstone stöd för att rita (2D) Punkter Av olika storlek Linjer Heldragna, streckade, prickade osv Polygoner Fyllda eller icke fyllda Text Med olika storlek och typsnitt Kurvor Som splines och Bezierkurvor previous next 16 Attribut Det finns också stöd för att ange Färg eller mönster Linjebredd Prickad streckad Klippning Då man konstruerar ett fönster att rita i brukar (eller kan) man också ange klipprektanglar Dvs ange dom områden där objekten skall synas Objekt utanför, eller delvis utanför, klipps mot området I OpenGL kommer vi senare se prov på fler attribut, tex för att ange olika typer av polygoner och (självklart) i tre dimensioner previous next 17 previous next 18

Fönster och vyer Ett fönster brukar ofta delas in i delvyer (viewports) Attribut Linjetjocklek Linjeändor I varje viewport jobbar man med ett lokalt koordinatsystem (fönstret har ocksp ett koordinatystem) Linjehörn previous next 19 previous next 20 Java: grunder och syntax Java konstruerat på SUN Första versionen släpptes 1995 Statiskt typat Virtuell maskin som gör det maskinoberoende Klassbibliotek språkklasser, stränghantering, grafik, gränssnitt, fönster, nät, händelsehantering, processer, collections, mm Bindning till WWW, med applets och liknande Har fått sin huvudsakliga spridning via Internet Syntax som C, semantik och klasser mer som Smalltalk previous next 21 Java språkets grundbyggstenar Java uppbyggt kring dom objektorienterade fundamenten klass attribut metod, meddelande polymorfi inkapsling arv konstruktör Inför också interface package previous next 22 Konstruera klass Klassnamn = filnamn En klass skall ha samma namn som den fil den placeras i Klassen Circle i filen Circle.java En fil kan innehålla flera klasser men bara en av dem kan vara deklarerad public, Det är den publika klassens namn som motsvarar filens Deklarera och instansiera Deklaration av instans KlassNamn variabelnamn; Instansiering variabelnamn = new KlassNamn(); Definition av klass, mall public class KlassNamn extends SuperKlassNamn{ attribut (instans- och klassvariabler) metoder (instans- och klassmetoder) konstruktörer alternativt, både deklaration och instansiering på en gång KlassNamn variabelnamn = new KlassNamn(); previous next 23 previous next 24

Sätt upp omgivning Environmentvariabel Gör först (NADA) module add jdk/latest Idag ger detta senaste versionen, JDK1.4.2 Kompilera och köra Kompilera med javac filnamn javac Klassnamn.java om allt går bra skapas då en fil med namnet Klassnamn.class Kör med java klassnamn java Klassnamn previous next 25 previous next 26 Javas API (Application Programmer s Interface) Java:s API innehåller bla awt (abstract windowing toolkit) som delvis kan användas som ett FrameWork som bla stödjer konstruktion av applikationer med fönster Frame och Applet java.lang java.awt java.applet Object Object Component Component Container Container Panel Panel Applet Applet Konstruktion av egna fönster Fundamental fönsterklass AWT: Frame Swing: JFrame Ett sätt att konstruera fönster med egna egenskaper (tex speciell utritning) är att subklassa fönsterklassen Beteendet ändras, dvs anpassas till dom egna önskemålen, genom att lämpliga metoder skrivs om i den konkreta (egna) subklassen Tex paint() eller paintcomponent() för att beskriva utritning Olika händelsehanterare definieras för att ta hand om olika inmatningshändelser I Swing subklassar man ofta JComponent previous next 27 Window Window Frame Frame Ofta är det tillräckligt att (Java 1.1) subklassa Frame och implementera tex WindowListener, MouseListener och MouseMotionListener senare skall vi titta på hur vi istället kan använda adaptorer skriva public static void main(string [] args) instansiera den egna klassen, ange fönsterstorlek och ange att fönster och mushändelser skall tas emot (addwindowlistener(this) osv), öppna det hela skriva public void paint(graphics g) rita på skärmen konstruera metoder för dom gränssnitt för dom "lyssnare" vi angett att vi skall implementera previous next 28 Ofta importeras alla klasser i java.awt Instansiera Frame Sätt storlek Och öppna Exempel 1 (AWT) package mypackage; import java.awt.*; // Klassdefinition (utan extends medför subklass till Object) public class MyApplication { public static void main(string [] s) { Frame f = new Frame("Mitt första fönster"); f.setsize(200, 300); f.setvisible(true); och så sparar vi, kompilerar och kör Spara Spara filen med samma namn som klassen med extension.java, dvs här MyApplication.java Kompilera javac MyApplication.java Skapar en fil MyApplication.class Kör java MyApplication previous next 29 previous next 30

Vi definierar hur omritning av fönstret ska gå till Exempel 2 (AWT) package mypackage; import java.awt.*; public class MyFrame extends Frame { public MyFrame() { public MyFrame(String s) { super(s); public void paint(graphics g) { int x = 100, y = 200; for (int i = 0; i < 100; i++) { g.drawoval(x, y, i, i); public static void main(string [] s) { MyFrame f = new MyFrame("Mitt andra fönster"); f.setsize(200, 300); f.setvisible(true); previous next 31 För JFrame importerar vi javax.swing För mer avancerad grafik importerar vi java.awt.geom Med Graphics2D kan vi göra mer avancerade 2Dsaker Exempel 3, Swing, Graphics2D och JFrame package mypackage; import java.awt.*; import javax.swing.*; import java.awt.geom.*; public class MyJFrame extends JFrame { public void paint(graphics g) { Graphics2D g2 = (Graphics2D)g; g2.setstroke(new BasicStroke(8.0f)); g2.setcolor(color.magenta); g2.draw(new Arc2D.Double(40, 70, 200, 100, 120, 135, Arc2D.OPEN)); public static void main(string [] s) { MyJFrame f = new MyJFrame(); f.setsize(200, 300); f.setvisible(true); previous next 32 IDE, Integrated Development Environment En IDE är en utvecklingsmiljö Vi tittar på Eclipse http://www.eclipse.org En open source-miljö skriven för och i Java Har verktyg för att koda Hitta bibliotek, metoder mm Strukturera om kod (refactoring) Och lite på JBuilder, en IDE med GUI-byggare (dvs grafisk gränssnittsbyggare) http://www.borland.com Vi gör några enkla exempel i framförallt Eclipse (som jag personligen föredrar) Inkludera nödvändiga bibliotek Beskriv vad som ska göras om fönstret behöver ritas om OpenGL ett första exempel (simple1.c) #include <GL/glut.h> /* glut.h inkluderar gl.h och glu.h*/ void mydisplay(void) { glclear(gl_color_buffer_bit); /* Rensa fönstret */ glbegin(gl_polygon); /* Beskriv en polygon */ glvertex2f(-0.5, -0.5); glvertex2f(-0.5, 0.5); glvertex2f(0.5, 0.5); glvertex2f(0.5, -0.5); glend(); glflush(); /* Töm bufferten, dvs rita polygonen */ int main(int argc, char** argv) { glutcreatewindow("simple 1"); glutdisplayfunc(mydisplay); glutmainloop(); Skapa ett fönster Ange att mydisplay ska anropas vid omritning Låt glut:s huvudloop ta över (måste alltid vara med och sist i koden) previous next 33 previous next 34 kompilera och köra På NADAs Solaris/Unix-maskiner gcc simple1.c o simple1 -lglut -lgl -lglu -lxmu -lx11 -lm Under Windows med Cygwin och gcc/g++ och glut 3.7.6 installerat gcc simple1.c o simple1 -lopengl32 -lglu32 -lglut32 -lm -LC:\GLUT\glut-3.7.6-bin Där jag placerat glut-binärerna i C:\GLUT\glut-3.7.6-bin Kör genom att skriva (eller kanske dubbelklicka på simple1.exe) simple1 det blir enklare att kompilera med hjälp av en make-fil Fritt från Angel # This sample Makefile allows you to make an OpenGL application # whose source is exactly one.c file. # # To use this Makefile, you type: # make xxxx # where # xxxx.c is the name of the file you wish to compile # # A binary named xxxx will be produced CC = gcc #Windows LDLIBS = -lopengl32 -lglu32 -lglut32 -lm -LC:\GLUT\glut-3.7.6-bin #UNIX #LDLIBS = -lglut -lgl -lglu -lxmu -lx11 -lm.c: $(CC) $@.c $(LDLIBS) -o $@ previous next 35 previous next 36

då kan vi kompilera på följande sätt make simple1 Då kommer kompilering bara ske om simple1.c är förändrad I så fall skapas simple1.exe En egen initrutin Sätt upp fönstrets koordinater Vi utvidgar exemplet en aning (simple2.c) I förra exemplet använde vi en hel del defaultvärden Vi ändrar lite #include <GL/glut.h> void mydisplay(void) { /* Som i förra versionen void init() { /* Vi rensar med grönt den här gången */ glclearcolor (0.0, 1.0, 0.0, 1.0); /* och ritar med rött */ glcolor3f(1.0, 0, 0); glmatrixmode (GL_PROJECTION); glloadidentity (); previous next 37 /* left, right, bottom, top, near, far */ glortho(-1.0, 1.0, -1.0, 1.0, -1.0, 1.0); previous next 38 Anropa den egna init() int main(int argc, char** argv) { glutinit(&argc,argv); glutinitdisplaymode (GLUT_SINGLE GLUT_RGB); glutinitwindowsize(500,500); glutinitwindowposition(20,50); glutcreatewindow("simple 2"); glutdisplayfunc(mydisplay); init(); glutmainloop(); En buffer för omritning vidd, höjd Använd RGB för att definiera färger Fönstrets övre vänstra hörn origo i skärmens övre vänstra hörn previous next 39