1 Hva er grafisk databehandling?

Størrelse: px
Begynne med side:

Download "1 Hva er grafisk databehandling?"

Transkript

1 Avdeling for informatikk og e-læring, Høgskolen i Sør-Trøndelag 1 Hva er grafisk databehandling? Jan H. Nilsen Lærestoffet er utviklet for faget LV381D 3D-Programmering med OpenGL og Java Resymé: Denne leksjonen skal gi en kort introduksjon til grafisk databehandling og til OpenGL med Java-binding. OpenGL er et programvareinterface mot grafisk hardware, for eksempel dataskjermer via skjermkontroller. OpenGL er såkalt plattformuavhengig og kan kalles fra flere programmeringsspråk. Den mest brukte språkbindingen i Java heter JOGL..Du vil bli presentert for en del grunnleggende begreper, bildeeksempler og et enkelt programeksempel som bruker OpenGL med Javabinding til å tegne ut enkle figurer på dataskjermen din. (Lærestoffet i denne leksjonen er i hovedsak hentet fra Kap. 1 i Open GL, A primer, Angel. E., 2007 og kap. 1 i OpenGL Programming guide (Red Book) Shreiner, D. et al., 2007.) 1.1. Introduksjon Lærestoffet i denne og de resterende leksjonene vil bli forsøkt gjort mest mulig anveldelsesorientert, dvs at det i stor grad vil bli benyttet programeksempler i tilnærmingen til lærestoffet. Dette mener vi vil kunne gjøre stoffet lettere tilgjengelig og samtidig virke motiverende i innlæringsprosessen. Det er derfor viktig å komme tidlig i gang med programmeringen. Målsettingen er at du etter å ha arbeidet deg gjennom denne leksjonen skal være i stand til å skrive et lite program i OpenGL med java-språkbinding (JOGL), som tegner ut en figur på dataskjermen din. JOGL kan lastes ned gratis (se installasjonsveiledning lenger ned). Først i denne leksjonen er det gitt en kortfattet introduksjon til grafisk databehandling med noen bildeeksempler laget vha. programvaresystemet OpenGL. Så følger en introduksjon til OpenGL med Java-språkbinding (JOGL). Det er i leksjonene gitt et eksempel på et javarammeverk for utvikling av OpenGL-programmer med javabinding. Programkoden til rammeverket er lagt ved som et vedlegg til leksjonen og kan lastes ned direkte. En veiledning for nedlasting og innstallering av JOGL lokalt på din maskning finner du som et vedlegg til denne leksjonen. Basisstrukturen til et OpenGL-program er søkt forklart ved hjelp av et programeksempel. Gjennom programeksemplelet blir det også gitt en kortfattet forklaring på hva som menes med OpenGL-primitiver, -metode- og -kommandosyntaks og - datatyper. Det vil også bli henvist til programbiblioteker relatert til OpenGL, henholdsvis GLU (OpenGL Utility Library) og GLUT (OpenGL Utility Toolkit). Til de fleste av leksjonene er det knyttet en øving. Som del av øvingen til denne leksjonen, skal du laste ned og installere JOGL. Du skal videre i øvingen lage ditt eget OpenGL-program som tegner ut en trekant og en firkant på skjermen. Se vedlagt øvingsoppgave. Bortsett fra leksjonene vil det meste av læremateriellet som følger med dette kurset være på engelsk. Dersom du ikke er vant til å lese engelsk, kan nok dette i starten virke noe strevsomt. Du må nok bare venne deg til engelsken raskest mulig, fordi som nevnt mesteparten av faglitteraturen forekommer på dette språket. 3D-Programmering med OpenGL og Java er et fag det ikke er mulig bare å lese seg til. Praksis er helt nødvendig for å lære faget. Det legges derfor stor vekt på praktisk øvinger i dette kurset. Opphavsrett: Forfatter og Stiftelsen TI

2 Hva er grafisk databehandling? side 2 av Noen nyttige linker: Lenkene under viser til svært mye lærestoff, programeksempler og demoer. Det på ingen måte menignen at du skal sette det inn i alt dette i forbindelse med denne leksjonen. Hovedhensikten med å vise til disse lenkene, er at du kan bebynne å gjøre deg kjent med dem slik at du kan bruke dem som støtte til leksjoene videre utover i kurset. En del av lenkene viser til programeksempler skrevet i c-kode, for eksempel Red Book, men det vil i kurset bli forsøke å vise hvordan denne koden kan benyttes også i Java-programmer. Før man begynner med JOGL programmering så må Java (Java SE) være installert på maskinen. OBS! Vi skal i dette kurset ikke bruke siste versjon av JOGL (versjon 2), men vi bruker i stedet versjon 1.1.1a. Grunnen til dette er at det er endringer i versjon 2 som gjør at man ikke kan bruke veiledningene man f.eks. finner på NeHe (se lenke under) osv. om man bruker siste versjon. Hvilken versjon man bruker betyr ingenting for forståelsen, men det er veldig greit å kunne finne eksempelkode når man skal lære OpenGl. Det er derfor bedre å gå over på ny versjon når man har lært det grunnleggende. For nedlasting og installasjon se lenken under. JOGL nedlasting og installasjon JOGL API, dokumentasjon, demoer OpenGL s hjemmeside Silicon Graphics hjemmeside OpenGL Programming Guide, The Red Book: Programeksempler i C Appendix J Color Plates: NeHe tutrials OpenGL Java, C, C++ Installasjonsveiledning for JOGL på hjemmepc Nate Robins tutorials. Demonstrerer grunnleggende OpenGL-begreper ved å la brukeren interaktivt endre på metodeparametre for transformasjoner, lys, tåke og tekstur Kontakt Tapir bokhandel Trondheim for bestilling av lærebok: kalvskinnet@tapir.no 1.2. Hva er grafisk databehandling? I følge Angel, 2007, Interactive Computer Graphics, omfatter grafisk databehandling alle aspekter ved det å produsere tegninger eller bilder ved hjelp av en datamaskin. Alt fra det å tegne punkter og linjer på en dataskjerm eller et digitalt framvisningsmedium, til å generere virtuelle, fotorealistiske modellbilder, kan derfor kalles grafisk databehandling. Kvaliteten på slike datamaskingenererte bilder er nå så gode at de ofte vanskelig kan skilles fra fotografier tatt med vanlige kameraer. Det er vanlig å angi fire hovedanvendelsesområder for grafisk databehandling, henholdsvis til vising av informasjon på skjerm, til design av alt fra muttere til biler hus og store industrianlegg, til simulering, visualisering og animasjon og til grafiske brukergrensesnitt. På grunn av at pris, brukervennlighet og ytelse på både grafisk programvare og maskinvare stadig blir mer tilgjengelig, så har bruken av datagrafikk økt svært mye de siste årene. Fig Ekempel I grafisk databehandling blir de objektene som skal tegnes ut, først beskrevet ved matematiske modeller. En terning/kube kan for eksempel modelleres i et tredimensjonalt koordinatsystem ved å definere origo og akser i koordinatsystemet og angi koordinatene til hjørnepunktene på terningen i dette koordinatsystemet.

3 Hva er grafisk databehandling? side 3 av 15 Fig Kube i et 3D-aksekors (Børre Stenseth 2006) Veien fra den matematiske beskrivelsen av objektene (definering av koordinatsystem og 3d-koordinater for hjørnepunkter) til uttegning på en skjerm, medfører en rekke operasjoner. Ulike grafiske programsystemer vil som oftest ha ulike måter å gjøre dette på. I dette faget skal vi benytte det grafiske programsystemet OpenGL. Noen bildeeksempler fra Red Book: Figur Objekter rendret som trådmodeller. (Fra Red Book Nettversjon)

4 Hva er grafisk databehandling? side 4 av 15 Figur Samme scene. Tåke brukt til å simulere dybde. (Fra Red Book Nettversjon) Figur Samme scene. Glatting av linjer med antialiased linjer. (Fra Red Book Nettversjon)

5 Hva er grafisk databehandling? side 5 av 15 Figur Samme scene. Flat skyggelegging av polygoner. (Fra Red Book Nettversjon) Figur Samme scene. Rendret med lys og jevnt-skyggelagte polygoner. (Fra Red Book Nettversjon)

6 Hva er grafisk databehandling? side 6 av 15 Det finnes flere eksempler i Red Book på Hva er OpenGL? OpenGL er et interaktivt datagrafikksystem (programvaregrensesnitt) som gjør det mulig for en programmerer å skive programmer som aksesserer grafisk maskinvare. OpenGL: er etablert som en slags industristandard og referansestandard for generell 3D-grafikk blir utviklet av Silicon Graphics. utvikles nå under kontroll av et: Architectural Review Board. Beskrivelse av denne virksomheten finnes på: ARB. Her finnes også linker til beskrivelser, kurs og eksempler. Det finnes en masse informasjon om OpenGL på nettet. OpenGL er utviklet og beskrevet som en plattformuavhengig pakke og kan kjøres på en rekke plattformer: MS-Windows NT/2000/95, Linux, Unix, MacOS, OS/2. Vi kan benytte OpenGL fra flere programmeringsspråk. Det finnes i dag komplette språkbindinger for i hvert fall C, C++, Fortran og Java. OpenGL er et programvaregrensesnitt- mot grafisk hardware(skjerm, printer osv). OpenGL består av ca 250 metoder/kommandoer som kan benyttes til å spesifisere objekter og operasjoner som er nødvendige for å produsere interaktive, 3D grafiske anvendelser OpenGL innholder opprinnelig ingen kommandoer/metoder for å utføre vindus/skjermoperasjoner eller for å motta brukerinput OpenGL tilbyr ingen høy-nivå-kommandoer/metoder for å beskrive modeller av 3D-objekter OpenGL tilbyr kommandoer/metoder for å bygge egne modeller av objekter på grunnlag av et lite sett med geometriske primitiver: (hjørne)punkter, linjer og polygoner. OpenGL gjør oss i stand til å: Konstruere former/objekter på grunnlag av geometriske primitiver og dermed skape matematiske beskrivelser av objektene. (OpenGL betrakter punkter, linjer, polygoner, digitale bilder og bitmaps som primitiver) Ordne polygonene i 3D-rom og velge ønsket betraktningspunkt for å se på den sammensatte scenen. Beregne fargen på objektene. Fargene kan være eksplisitt gitt av anvendelsen eller bestemt av betraktningsbetingelser, eller ved å legge på tekstur/digitale bilder/mønster på objektene og som kombinasjoner av disse tre beregningsmåtene. Omforme de matematiske beskrivelsene av objektene og deres tilhørende farger til pixler på skjermen. OpenGL kan også utføre en rekke andre operasjoner som for eksempel eliminere skjulte flater. Basisstrukturen i et OpenGL-program kan være enkel: Hovedoppgavene er: Initiere visse tilstander som kontrollerer hvordan OpenGL rendrer (render/tegner ut) objekter eller hele scener Spesifisere objektene som skal rendres /tegnes ut vha modeller. Modellene av objektene er basert på matematiske beskrivelser av objektene, for eksempel alle koordinatverdier til hjørnepunktene til objektene. Objektmodellene blir så bygget opp/tegnet ut ved hjelp av et lite sett med OpenGL-geometriske primitiver; punkter, linjer og polygoner, som blir spesifisert ved hjelp av objektenes hjørnepunkter. Det endelige produktet etter en renderingsprosess er et 2D-bilde av objektet på dataskjermen. Bildet framkommer ved å fargelegge dataskjermens bildeelementer/pixler på en slik måte at objektene kan gjenkjennes.

7 Hva er grafisk databehandling? side 7 av 15 OpenGL-primitiver OpenGL benytter seg av et meget begrenset sett med geometriske primitiver for å sette sammen objekter. I figur er alle disse geometriske primitivene angitt. Figur OpenGL geometriske primitiver (RedBook nettversjon) Alle objekter som tegnes ut i OpenGL genereres følgelig enten vha de geometriske primitivene punkter, linjer mellom punkter eller flateelementer som trekanter eller konvekse mangekanter. En ikke konvekse mangekant må inndeles i enten to mindre konvekse mangekanter eller trekanter. Se RedBook, 2006 side 39 om gyldige polygoner. Figur Gyldige polygoner (konvekse) Ikke gyldige (konkave eller med hull) (Red Book Nettversjon) Hva er OpenGL med Javabinding JOGL? JOGL er open kildekode teknologi. Det var Game Technology-gruppen ved Sun som startet arbeidet med JOGL i JOGL tilbyr full tilgang til OpenGL API-er og kan kombineres med Java AWT og Swing komponenter. Mesteparten av egenskapene i OpenGL GLU (OpenGL Utility library) og GLUT (OpenGL Utility Toolkit), kan nås via JOGL. JOGL-versjonen av GLUT inneholder ikke window-funksjonalitet. Dette blir tatt hand om av Java. JOGL er i ferd med å bli utviklet til å bli referanse implementasjon for JSR.231spesifikasjonen for binding av OpenGL til Java. Dette arbeidet pågår fortsatt, men det sies at det er relativt nært forestående at en første offisiell versjon vil foreligge. Siste stabile release candidate, rc, når dette blir skrevet, var rc8 fra 22. februar 2008.

8 Hva er grafisk databehandling? side 8 av Kommandosyntaks for kjøring av OpenGL-programmer i Java Navnet på OpenGL-metoder som kalles fra Java begynner med GL. + OpenGLMetodenavn(); Sammensatte metodenavn i OpenGL skrives med stor forbokstav for hvert av de sammensatte ordene. Eks: glclearcolor() Konstanter skrives med store bokstaver og understrekningstegn mellom sammensatte ord; for eks: GL.GL_CLEAR_BUFFER_BIT. Følgende eksempel viser en del av en JOGL-metode som tegner ut en polygon. Hjørnepunktene er gitt slik i modellkoordinatsystemet at de ligger i xy-planet og danner et kvadrat med sentrum i origo : gl.glcolor3f(1.0f, 1.0f, 1.0f); // Setter fargen på de etterfølgende objektene som skal tegnes til hvit gl.glbegin(gl.gl_polygon); // Start på spesifikasjonen av objektet og hvilken OpenGL primitiv som skal benyttes gl.glvertex2f(-0.5f, -0.5f); // Def. polygonet s hjørnepunkter (2D) (vertex) gl.glvertex2f(-0.5f, 0.5f); gl.glvertex2f(0.5f, 0.5f); gl.glvertex2f(0.5f, -0.5f); gl.glend(); //Angir slutten på spesifikasjon av polygonet Eksempel Eksempel på JOGL-syntaks. Del av JOGL-metode som tegner ut et kvadratisk polygon sentrert i origo og med hjørnepunkter (x,y) lik (-0.5, -0.5), (-0.5, 0.5), (0.5, -0.5) og (0.5, 0.5). Vi ser at for enkelte av metodenavnene så står det 2f eller 3f foran parentesene. Det betyr at antall argumenter er henholdsvis 2 eller 3 og at datatypen på argumentene er float.

9 Hva er grafisk databehandling? side 9 av Datatyper i JOGL med korresponderende datatyper i c- og Java I tabell er det vist en sammenlikning mellom OpenGL-datatyper og korresponderende datatyper i c- og Java Tabell Datatyper Suffix Data Type Typical Typical OpenGL Type Definition Corresponding C-language Type Corresp. Java Type b 8-bit integer signed char byte GLbyte s 16-bit integer short short GLshort i 32-bit integer long int GLint, GLsizei f 32-bit floating-point float float GLfloat, GLclampf d 64-bit floating-point double double GLdouble, GLclampd ub 8-bit unsigned integer unsigned char GLubyte, GLboolean us 16-bit unsigned integer unsigned short short, char GLushort ui 32-bit unsigned integer unsigned long GLuint, GLenum, GLbitfield I de etterfølgende kapitlene er det forsøkt å gi en kortfattet introduksjon til hva som menes med at OpenGL er en tilstandsmaskin, eksempler på noen tilstandsvariable, OpenGL rendering pipeline, støttebibliotekene GLU og GLUT og et enkelt rammeverk for kjøring av OpenGL-programmer i Java. Dette er omfattende temaer som det her bare gis en kort beskrivelse av men som vil bli tatt opp nærmere i senere leksjoner. Hensikten med å ta de med her er å forsøke å gi en viss forståelse for å lage et enkelt program i OpenGL med Java-binding OpenGL en tilstandsmaskin OpenGL settes i en tilstand/modus som forblir slik til den blir endret. Tilstandene kan gjelde for eksempel tilstander som farge og koordinattransformasjoner. Eksempelvis vil OpenGL-metodekallet på vegne av et objektet gl av klassen GL se slik ut: gl.glcolor3f(1.0f, 1.0f, 1.0f);, spesifisere programutførelsen slik at alt etterfølgende blir tegnet med hvit farge. Dette vil skje helt til fargen endres, for eksempel gjennom et nytt kall til samme metode. Mange tilstandsvariable refererer til moduser/tilstander som enten kan slås på eller av. Dette kan gjøres med gl.glenable() og gl.gldisable(). For eksempel vil metodekallet: gl.glenable(gl.gl_depth_test); //Enables Depth Testing slå på en dybdetest som medfører at skjult flater ikke blir tegnet ut. Verdiene på tilstandsvariablene kan finnes ved metodekallene: gl.glgetbooleanv(), gl.glgetdoublev(), gl.glgetfloatv(), gl.glgetinteger(), gl.glgetpointerv(), gl.glisenabled()

10 Hva er grafisk databehandling? side 10 av Eksempler på noen tilstandsvariable for farge I tabell er det gitt eksempler på noen tilstandsvariabler for farge. Tabell Noen tilstandsvariabler for farge. (RedBook nettversjon): Coloring State Variables State Variable Description Attribute Group Initial Value Get Command GL_FOG_COLOR Fog color fog 0, 0, 0, 0 glgetfloatv() GL_FOG_INDEX Fog index fog 0 glgetfloatv() GL_FOG_DENSITY Exponential fog density fog 1.0 glgetfloatv() GL_FOG_START Linear fog start fog 0.0 glgetfloatv() GL_FOG_END Linear fog end fog 1.0 glgetfloatv() GL_FOG_MODE Fog mode fog GL_EXP glgetintegerv() GL_FOG True if fog enabled fog/enable GL_FALSE glisenabled() GL_SHADE_MODEL GL_PROJECTION_MATRIX glshademodel() setting Projection matrix stack lighting GL_SMOOTH glgetintegerv() -- Identity glgetfloatv() OpenGL rendering/uttegning pipeline Data som leses inn av et OpenGL-program gjennomgår en rekke prosesser før de tegnes ut som figurer/pixler på en dataskjerm. Vi sier at vi sender dataene gjennom en OpenGL rendering pipeline for å bli tegnet ut på skjermen. Figur viser en prinsippskisse av denne dataflyten og hvilke prosesser den utsettes for. Figur OpenGL rendering pipeline. (RedBook nettversjon) Følgende prosesser utføres på inndataene som kan være enten geometriske data (koordinatverdier) eller pixelverdier: 1. Inndata: Geometriske data eller pixeldata

11 Hva er grafisk databehandling? side 11 av Display lister: mellomlagring av inndata 3. Evaluators: Evaluatorer tilbyr metoder for å utlede/bestemme/beregne hjørnepunkter for å kunne tegne ut en 3D-flate p.g.a. kontrollpunktene. Alle geometriske primitiver kan beskrives av hjørnepunkter (Vertices). Noen flater kan beskrives av kontrollpunkter og matematiske basisfunksjoner. 4. Per-Vertex Operasjoner: Samlingen av hjørnepunkter vil bli konvertert til primitiver, e,.g. linjer, polygoner osv. Romlige koordinater blir transformert og projisert fra en posisjon i 3D verden til en posisjon på skjermen, 2D. 5. Primitive Assembly, P.A.: Klipping er viktig del av primitiv assembly. Punkt-klipping, linje- og polygon-klipping. Perspektiv divisjon: Objekter langt borte ser mindre ut. Resultatet av P.A. er fullstendige geometriske primitiver som er transformert og klippet med rettfarge og dybde og også med texturverdier og retningslinjer for rasterisering. 6. Texture Assembly: OpenGL kan legge textur-bilder på geometriske objekter for å få de til å se mer realistiske ut 7. Rasterisering. Omforming av geometriske- og pixel-inndata til fragmenter. Hver fragmentrute tilsvarer en pixel i bildebufferet. Når hjørnepunkter, knyttes sammen til linjer eller indre pixler beregnes for å fylle polygoner, blir linje og polygonstriper, linjebredde, punktstørrelse, skyggeleggingsmodell og overdekkingsberegninger for å unngå alliasing, vurdert. Farge og dybdeverdier blir tilordnet hver enkelt pixel/fragmentrute. 8. Fragmentoperasjoner(skjermpixler) Før de endelige pixleverdiene blir lagret i bildelageret/framebufferet, blir det utført en rekke operasjoner som kan endre og fjerne fragementer. Alle disse operasjonene kan enables eller disables, dvs slås på eller av. Den første operasjonen som kan bli slått på er tekstur, hvor et teksturelement blir generert fra teksturminnet for hvert fragment og lagt oppe på fragmentet. Så kan eventuelt tåkeberegninger bli utført. Deretter kan følgende tester utføres, scissor/klippetesten(default klipperektangel matcher størrelsen på vinduet på skjermen og klippetesten er slått av). Så kan det utføres en alpha/gjennomsiktighetstest, og dybdebuffer- test for å fjerne skjulte flater. Dersom et fragment ikke består en påslått-test, kan det medføre at den videre prosesseringen av en fragmentrute avsluttes. Til slutt kan blending (det innkommende fragmentets R,G,B og alpha-verdier blir kombinert med de samme R,G,B-verdiene på det pixelet som allerede er lagret på den samme plassen i bildebufferet, dithering (kan øke fargeoppløsningen på bekostning av romlig oppløsning ved at fargeverdien i et pixel, blir beregnet på grunnlag av omliggende pixler), logiske operasjoner (OR, XOR og Invert) og maskering av en bit-maske bli utført. Etter alt dette blir det grundig prosesserte fragmentet lagt på riktig plass i skjermminnet som en pixelverdi Biblioteker relatert til OpenGL: OpenGL Utility Library (GLU ) GLU inneholder mange metoder som benytter lavnivå OpenGL metoder til å utføre sammensatte oppgaver. Det kan være b.a. å sette opp matriser for ulike betraktningsorienteringer, til å angi projeksjonsmåte og til klipping/avgrensing av synsvolumet. GLU-metodene begynner med: glumetodenavn(). For eksempel vil glu-metoden, kalt på vegne av et GLU-objekt glu,: glu.gluperspective(gldouble fovy, GLdouble h/ Glfloat w, Gldouble near, GLdouble far); spesifisere en perspektivisk projeksjonsmatrise og klippe ut et synsvolum som blir vist på skjermen. Figur viser betydningen av parameterverdiene i metodehodet. Figur Perspektivisk synsvolum spesifisert med glu.gluperspective(fov, w/h, near, far); (RedBook nettversjon)

12 Hva er grafisk databehandling? side 12 av Biblioteker relatert til OpenGL: OpenGL Utility Tookit (GLUT ) OpenGL er uavhengig av vindussystemer og operativsystemer. OpenGL inneholder ingen kommandoer for å åpne vinduer eller lese hendelser fra tastatur eller mus. GLUT inneholder funksjonalitet som forenkler åpning av vinduer og registrering av input. Dette benyttes ikke i Java. Her benyttes Javas egen vindows-handtering. OpenGL s tegnekommandoer er begrenset til å generere enkle geometriske primitiver (punkter, linjer og polygoner) GLUT inneholder en god del rutiner som lager mer kompliserte 3d-objekter (teapot, torus(smultringer), kuler osv). GLU inneholder også noen rutiner som kan generere noen av de samme figurene som GLUT (kule, sylinder, skiver). Figur viser eksempel på kompliserte 3D-objekter, en tekanne, som kan tegnes ut direkte med glut-metoden: glut.glutsolidteapot(gldouble size). Det finnes også en tilsvarende metode som tegner ut tekannen som et trådmodell, glut.glutwireteapot(gldouble size). Figur Tekanner tegnet med glut.glutsolidteapot() og innlagt ulike grader av skjelveeffekter, farge- og lyssetting for å simulere fokuserings- og dybdeeffekter. Den gullfargede tekannen er skarpest/ i fokus. (Red Book, nettversion) Et enkelt rammeverk for kjøring av OpenGL-programmer i Java JOGL API og dokumentasjon kan lastes ned fra siden Det finnes en enkel installasjonsveiledning se lenken Velg siste stabile beta-versjon. Dokumentasjonen kan også brukes online fra siden: I det etterfølgende er det gitt et eksempel på uttegning av en firkant på dataskjermen vha OpenGL med Java-binding/OpenGL med Java-rammeverk. Klassen som inneholder main og lager et vindu på skjermen med tegningen inne i: /* */ import java.awt.*; // Bruker Java-klassene Color og Graphics import javax.swing.*; // Bruker Java-klassene JFrame og JPanel import javax.media.opengl.glcanvas; // JOGL klassen GLCanvas import javax.media.opengl.gl; // JOGL klassen GL import javax.media.opengl.gldrawable; // JOGL klassen GLDrawable import javax.media.opengl.gleventlistener; // JOGL interfacet GLEventListener import javax.media.opengl.glautodrawable; // JOGL klassen GLAutoDrawable import javax.media.opengl.glu.glu; // JOGL klassen GLU class Vindu extends JFrame { public Vindu(String tittel) { settitle(tittel); setdefaultcloseoperation(exit_on_close); TegningOv1_1JOGL tegningen = new TegningOv1_1JOGL(400, 400);

13 Hva er grafisk databehandling? side 13 av 15 add(tegningen); pack(); /*Klassen som inneholder main*/ class GrafikkEksempelOv1JOGL { public static void main(string[] args) { Vindu etvindu = new Vindu("En trekant og en firkant"); etvindu.setvisible(true); Klassen som generer tegningen TegningOv1_1JOGL: /* TegningOv1_1JOGL.java JHN Draws one quad OpenGL with Java-binding, JOGL Reviced for newest stabile jogl version ( JSR-231 rc8 Feb ) */ // Java classes: import java.awt.*; // klassene Color og Graphics import javax.swing.*; // klassene JFrame og JPanel //JOGL classes: import javax.media.opengl.glcanvas; import javax.media.opengl.gl; import javax.media.opengl.gldrawable; import javax.media.opengl.gleventlistener; import javax.media.opengl.glautodrawable; import javax.media.opengl.glu.glu; import javax.media.opengl.glcapabilities; public class TegningOv1_1JOGL extends JPanel implements GLEventListener{ /* the interface GLEventListener innholder følgende fire metoder som må implementeres: -display(glautodrawable drawable) Called by the drawable to initiate OpenGL rendering by the client - displaychanged(glautodrawable drawable, boolean modechanged, boolean devicechanged) Called by drawable when the display mode or the display device associated with GLDrawable has changed. - init (GLAutoDrawable drawable) Called by the drawable immediately after the OpenGL context is initialized. - reshape(glautodrawable drawable, int x, int y, int width, int height) Called by the drawable during the first repaint after the component has been resized. */ private GLCanvas canvas; private GLU glu = new GLU(); public TegningOv1_1JOGL(int width, int hight) { // Konstruktør til tegneklassen super(); // Anroper konstruktøren rett over i klassetreet, dvs i klassen JPanel GLCapabilities capabilities = new GLCapabilities();//Instatiate an object to give properties to the GLCanvas object capabilities.sethardwareaccelerated(true); //We want hardware acceleration capabilities.setdoublebuffered(true); //And double buffering to avoid flickering canvas = new GLCanvas(capabilities); // Instantiate the GLCanvas object, canvas, with the wanted properties canvas.addgleventlistener(this); // Knytter intefaces GLEventListner mot canvas objektet.

14 Hva er grafisk databehandling? side 14 av 15 this.add(canvas); this.setsize(width,hight); canvas.setsize(width,hight); canvas.setvisible(true); public void init(glautodrawable gldrawable) { // Knytter canvas-objektet til objektet av klassen TegningOv1_1JOGL // Setter størrelsen på TegningOv1-1JOGL (JPanel) ///We want the JPanel and the GLCanvas to have the same size //This is somehow necessary GL gl = gldrawable.getgl(); //Get the GL object from gldrawable gl.glclearcolor(1.0f, 1.0f, 1.0f, 1.0f); // Clear the background color of the window/canvas and set it to white gl.glmatrixmode(gl.gl_projection); // Sets the matrix mode to (GL_PROJECTION ) gl.glloadidentity(); // Reset the matrix to the identity matrix glu.gluperspective(45.0,1.25,2.0,9.0); // Specifies the projection matrix (fov, w/h, near plane, far plane) and // clipping volume See Fig public void reshape(glautodrawable gldrawable, int i, int i1, int i2, int i3) { // Has to be implemented due to the GLEventListener interface. Because we draw a static scene and we have given the //size of the GLCanvas the values width, and hight = 400, 400, we do not need to reshape the GLCanvas. /* Draw a triangle */ public void drawglscene(glautodrawable gldrawable) { GL gl = gldrawable.getgl(); gl.glclear(gl.gl_color_buffer_bit GL.GL_DEPTH_BUFFER_BIT); //Clear Screen And Depth Buffer gl.glmatrixmode(gl.gl_modelview); // Sets the view matrix mode to (GL_MODELVIEW) /*Viewing and modeling transformations in OpenGL are combined into a single modelview matrix*/ gl.glloadidentity(); // Initialize the ModelView matrix glu.glulookat(0.0,0.0,1.0, 0.0,0.0,0.0, 0.0,1.0,0.0); // Specifies View model transformation matrix for camera position gl.gltranslatef(-1.5f,0.0f,-5.0f); // Alter view model transf. matrix, move x=-1.5 units y=0 and z= 0 units gl.glcolor3f(1.0f,0.0f,0.0f); // Set the Color to Red for the next to be drawn gl.glbegin(gl.gl_triangles); gl.glvertex3f( 0.0f, 1.0f, 0.0f); gl.glvertex3f(-1.0f,-1.0f, 0.0f); gl.glvertex3f( 1.0f,-1.0f, 0.0f); gl.glend(); /** void display() Draw to the canvas. */ /* Purely a Java thing. Calls drawglscene() once GL is initialized */ // Start drawing a triangle using the polygon primitive GL.GL_TRIANGLES // Top vertex // Bottom Left vertex // Bottom Right vertex // Finished Drawing The Triangle public void display(glautodrawable gldrawable) { GL gl = gldrawable.getgl(); drawglscene(gldrawable); // Calls drawglscene gldrawable.swapbuffers(); // Ligger ikke i glut slik som i c, her er det viktig for ikke å få flimmer!! gl.glflush(); // Tvinger tidligere buffrede OpenGL kommandoer til å utføres med en gang. public void displaychanged(glautodrawable gldrawable, boolean b, boolean b1) { // Has to be implemented due to the GLEventListener interface // TegningOv1_1 Innhold

15 Hva er grafisk databehandling? side 15 av INTRODUKSJON Noen nyttige linker: HVA ER GRAFISK DATABEHANDLING? HVA ER OPENGL?... 6 INNHOLD... 15

Programmering grunnkurs TDAT1001: Grafikkdel. Introduksjon

Programmering grunnkurs TDAT1001: Grafikkdel. Introduksjon Programmering grunnkurs TDAT1001: Grafikkdel Introduksjon Hva er grafisk databehandling? side 2 Noen eksempler på datagrafikk side 3 Undervisningsopplegg og læremateriell side 4 Introduksjon til OpenGL

Detaljer

Et enkelt rammeverk for kjøring av OpenGL-programmer i Java

Et enkelt rammeverk for kjøring av OpenGL-programmer i Java 1 Et enkelt rammeverk for kjøring av OpenGL-programmer i Java JOGL2 API og dokumentasjon kan lastes ned fra siden: http://www.aitel.hist.no/fag/_jva/forelesninger/grafikk/grafikk_h2015/nedlasting_og_installasjonsveiledning_jogl2.pdf

Detaljer

Leksjon G2: Transformasjoner

Leksjon G2: Transformasjoner 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

Detaljer

1 Hva er grafisk databehandling?

1 Hva er grafisk databehandling? Avdeling for informatikk og e-læring, Høgskolen i Sør-Trøndelag 1 Hva er grafisk databehandling? Jan H. Nilsen 14.08.2016 Lærestoffet er utviklet for faget LV381D 3D-Programmering med OpenGL og Java Resymé:

Detaljer

Leksjon 2: Transformasjoner

Leksjon 2: Transformasjoner Lineær algebra med grafiske anvendelser http://www.aitel.hist.no/fag/_lag/ Leksjon 2: Transformasjoner Fra modell til tegning på skjerm side 2 Modell Plantransformasjoner/translasjon side 3 Modell Plantransformasjoner/skalering

Detaljer

Object interaction. Innhold. Abstraksjon 03.09.2007. Grunnleggende programmering i Java Monica Strand 3. september 2007.

Object interaction. Innhold. Abstraksjon 03.09.2007. Grunnleggende programmering i Java Monica Strand 3. september 2007. Object interaction Grunnleggende programmering i Java Monica Strand 3. september 2007 1 Innhold Til nå: Hva objekter er og hvordan de implementeres I klassedefinisjonene: klassevariable (fields), konstruktører

Detaljer

Kort om meg. INF1000 Uke 2. Oversikt. Repetisjon - Introduksjon

Kort om meg. INF1000 Uke 2. Oversikt. Repetisjon - Introduksjon Kort om meg INF1000 Uke 2 Variable, enkle datatyper og tilordning Fredrik Sørensen Kontor: Rom 4311-NR, Informatikkbygget Brukernavn/e-post: fredrso@ifi.uio.no Utdanning: Dataingeniør, 2000 Cand.Scient,

Detaljer

Leksjon 2: Transformasjoner

Leksjon 2: Transformasjoner Lineær algebra med grafiske anendelser Leksjon : Transformasjoner Fra modell til tegning på skjerm side Modell Plantransformasjoner/translasjon side 3 Modell Plantransformasjoner/skalering side 4 Modell

Detaljer

Leksjon G2: Transformasjoner

Leksjon G2: Transformasjoner 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

Detaljer

Grafiske brukergrensesnitt med Swing og AWT

Grafiske brukergrensesnitt med Swing og AWT Grafiske brukergrensesnitt med Swing og AWT - 1 av 11 INNHOLD INTRODUKSJON 3 VINDUER, RAMMER OG PANELER. 4 KOMPONENTER OG VINDUSELEMENTER 6 KNAPPER OG KNAPPELYTTERE.. 8 LAYOUT.. 10 APPENDIX. 11 2 av 11

Detaljer

1. NetBeans IDE: Lage en enkel mobilapplikasjon

1. NetBeans IDE: Lage en enkel mobilapplikasjon Avdeling for informatikk og e-læring, Høgskolen i Sør-Trøndelag NetBeans IDE: Lage en enkel mobilapplikasjon Mildrid Ljosland/Lene Hoff 09.09.2008 Lærestoffet er utviklet for faget SO350D J2ME for programmering

Detaljer

Kanter, kanter, mange mangekanter

Kanter, kanter, mange mangekanter Kanter, kanter, mange mangekanter Nybegynner Processing PDF Introduksjon: Her skal vi se på litt mer avansert opptegning og bevegelse. Vi skal ta utgangspunkt i oppgaven om den sprettende ballen, men bytte

Detaljer

Oversikt. INF1000 Uke 2. Repetisjon - Program. Repetisjon - Introduksjon

Oversikt. INF1000 Uke 2. Repetisjon - Program. Repetisjon - Introduksjon Oversikt INF1000 Uke 2 Variable, enkle datatyper og tilordning Litt repetisjon Datamaskinen Programmeringsspråk Kompilering og kjøring av programmer Variabler, deklarasjoner og typer Tilordning Uttrykk

Detaljer

INF1000 : Forelesning 1 (del 2)

INF1000 : Forelesning 1 (del 2) INF1000 : Forelesning 1 (del 2) Java Variable og tilordninger Heltall, desimaltall og sannhetsverdier Utskrift på skjerm Ole Christian Lingjærde Gruppen for bioinformatikk Institutt for informatikk Universitetet

Detaljer

Oversikt. INF1000 Uke 1 time 2. Repetisjon - Introduksjon. Repetisjon - Program

Oversikt. INF1000 Uke 1 time 2. Repetisjon - Introduksjon. Repetisjon - Program Oversikt INF1000 Uke 1 time 2 Variable, enkle datatyper og tilordning Litt repetisjon Datamaskinen Programmeringsspråk Kompilering og kjøring av programmer Variabler, deklarasjoner og typer Tilordning

Detaljer

AlgDat 10. Forelesning 2. Gunnar Misund

AlgDat 10. Forelesning 2. Gunnar Misund AlgDat 10 Forelesning 2 Oversikt Java repetisjon IDE eller teksteditor + kommandolinje? Java Collections and Generics Programvareutvikling En mengde mer eller mindre veldefinerte metoder (software engineering):

Detaljer

Leksjon 3: Lys og materialer

Leksjon 3: Lys og materialer Lineær algebra med grafiske anvendelser Leksjon 3: Lys og materialer Fjerning av skjulte flater side 2 OpenGL Lysmodellering side 3 Lystyper og tilhørende materialrespons Bakgrunnslys (Ambient light) side

Detaljer

Del 1 En oversikt over C-programmering

Del 1 En oversikt over C-programmering Del 1 En oversikt over C-programmering 1 RR 2016 Starten C ble utviklet mellom 1969 og 1973 for å re-implementere Unix operativsystemet. Er et strukturert programmeringsspråk, hvor program bygges opp av

Detaljer

1- og 2-veis Innkapsling Java Stabel Kø Prio-kø Iterator. Enveis- og toveislister Innkapsling («boxing») (Big Java 6.8.5)

1- og 2-veis Innkapsling Java Stabel Kø Prio-kø Iterator. Enveis- og toveislister Innkapsling («boxing») (Big Java 6.8.5) Dagens tema Litt mer om vanlige lister Enveis- og toveislister Innkapsling («boxing») (Big Java 6.8.5) Nyttige varianter av lister: Stabler («stacks») (Big Java 15.5.1) Køer («queues») (Big Java 15.5.2)

Detaljer

public static <returtype> navn_til_prosedyre(<parameter liste>) { // implementasjon av prosedyren

public static <returtype> navn_til_prosedyre(<parameter liste>) { // implementasjon av prosedyren Prosedyrer Hensikten med en prosedyre Hensikten med en prosedyre er, logisk sett, å representere en jobb eller en funksjonalitet i et eller flere programmer. Bruk av entall er viktig: vi har generelt en

Detaljer

Innhold uke 7. Objektorientert programmering i Python: Introduksjon. Lite tilbakeblikk: Programflyt og skop. Lite tilbakeblikk: Funksjoner er uttrykk

Innhold uke 7. Objektorientert programmering i Python: Introduksjon. Lite tilbakeblikk: Programflyt og skop. Lite tilbakeblikk: Funksjoner er uttrykk Innhold uke 7 Objektorientert programmering i Python: Introduksjon IN1000 Høst 2017 uke 7 Siri Moe Jensen Lite tilbakeblikk: Prosedyrer og funksjoner Objektorientert programmering Introduksjon: Hvorfor,

Detaljer

Kodetime for Nordstrand barneskole

Kodetime for Nordstrand barneskole Kodetime for Nordstrand barneskole av Veronika Heimsbakk og Lars Erik Realfsen 1 Hva er Processing? Processing er et programmeringsspråk som er gratis, og tilgjengelig for alle! Man kan programmere i Processing

Detaljer

Mål med kurset. Java i INF 2400. Dagens tema. GUI med Swing. Dokumentasjon

Mål med kurset. Java i INF 2400. Dagens tema. GUI med Swing. Dokumentasjon Mål med kurset Java i INF 2400 Introduksjon til signalbehandling Lyd som anvendelse Få programmeringserfaring Dagens tema Utplukk av Java (GUI, kode-konvensjon, polymorfisme, classpath, javadoc) Java og

Detaljer

1- og 2-veis Innkapsling Java Stabel Kø Prio-kø Iterator. Enveis- og toveislister Innkapsling («boxing») (Big Java 6.8.5)

1- og 2-veis Innkapsling Java Stabel Kø Prio-kø Iterator. Enveis- og toveislister Innkapsling («boxing») (Big Java 6.8.5) Dagens tema Litt mer om vanlige lister Enveis- og toveislister Innkapsling («boxing») (Big Java 6.8.5) Nyttige varianter av lister: Stabler («stacks») (Big Java 15.5.1) Køer («queues») (Big Java 15.5.2)

Detaljer

public static <returtype> navn_til_prosedyre(<parameter liste>) { // implementasjon av prosedyren

public static <returtype> navn_til_prosedyre(<parameter liste>) { // implementasjon av prosedyren Prosedyrer Hensikten med en prosedyre Hensikten med en prosedyre er, logisk sett, å representere en jobb eller en funksjonalitet i et eller flere programmer. Bruk av entall er viktig: vi har generelt en

Detaljer

2 Om statiske variable/konstanter og statiske metoder.

2 Om statiske variable/konstanter og statiske metoder. Litt om datastrukturer i Java Av Stein Gjessing, Institutt for informatikk, Universitetet i Oslo 1 Innledning Dette notatet beskriver noe av det som foregår i primærlageret når et Javaprogram utføres.

Detaljer

Eksamen. Objektorientert Programmering IGR 1372

Eksamen. Objektorientert Programmering IGR 1372 + JVNROHQL1DUYLN $YGHOLQJIRU7HNQRORJL Eksamen i Objektorientert Programmering IGR 1372 7LG'HVHPEHU± 7LOODWWHKMHOSHPLGOHU 6NULYHVDNHU2UGE NHU -DYD6RIWZDUH6ROXWLRQV)RXQGDWLRQVRI3URJUDP 'HVLJQVNUHYHWDY/HZLV

Detaljer

Kanter, kanter, mange mangekanter. Introduksjon: Steg 1: Enkle firkanter. Sjekkliste. Skrevet av: Sigmund Hansen

Kanter, kanter, mange mangekanter. Introduksjon: Steg 1: Enkle firkanter. Sjekkliste. Skrevet av: Sigmund Hansen Kanter, kanter, mange mangekanter Skrevet av: Sigmund Hansen Kurs: Processing Tema: Tekstbasert, Animasjon Fag: Matematikk, Programmering, Kunst og håndverk Klassetrinn: 8.-10. klasse, Videregående skole

Detaljer

UNIVERSITETET I OSLO

UNIVERSITETET I OSLO UNIVERSITETET I OSLO Det matematisk-naturvitenskapelige fakultet Eksamen i INF1000 Grunnkurs i objektorientert programmering Eksamensdag: 13. juni 2006 Tid for eksamen: 9.00 12.00 Oppgavesettet er på 5

Detaljer

Eksekveringsrekkefølgen (del 1) Oppgave 1. Eksekveringsrekkefølgen (del 2) Kommentar til oppgave 1. } // class Bolighus

Eksekveringsrekkefølgen (del 1) Oppgave 1. Eksekveringsrekkefølgen (del 2) Kommentar til oppgave 1. } // class Bolighus // class Bygning Oppgave 1 System.out.println( Bolighus ); // class Bolighus Hva blir utskriften fra dette programmet? class Blokk extends Bolighus{ // class Blokk IN105subclassesII-1 Eksekveringsrekkefølgen

Detaljer

Oversikt. Introduksjon Kildekode Kompilering Hello world Hello world med argumenter. 1 C programmering. 2 Funksjoner. 3 Datatyper. 4 Pekere og arrays

Oversikt. Introduksjon Kildekode Kompilering Hello world Hello world med argumenter. 1 C programmering. 2 Funksjoner. 3 Datatyper. 4 Pekere og arrays Oversikt C programmering 1 C programmering Introduksjon Kildekode Kompilering Hello world Hello world med argumenter 2 Funksjoner 3 Datatyper 4 Pekere og arrays 5 Kontrollstrukturer Lars Vidar Magnusson

Detaljer

Forelesning inf Java 1

Forelesning inf Java 1 Forelesning inf1000 - Java 1 Tema: Javas historie Bestanddelene i et Java-program Programvariabler Ole Christian Lingjærde, 22. august 2012 Litt Java-historikk The Green Team I 1991 opprettet Sun Microsystems

Detaljer

Stjerner og galakser Nybegynner Python PDF

Stjerner og galakser Nybegynner Python PDF Stjerner og galakser Nybegynner Python PDF Introduksjon I denne oppgaven skal vi bruke funksjoner for å gjøre programmene vi skriver enklere og mer oversiktlige. Steg 1: Tegne stjerner Sjekkliste Vi begynner

Detaljer

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

Moving Objects. We need to move our objects in 3D space. Transformations Moving Objects We need to move our objects in 3D space. Moving Objects We need to move our objects in 3D space. An object/model (box, car, building, character,... ) is defined in one position

Detaljer

Innhold uke 4. INF 1000 høsten 2011 Uke 4: 13. september. Deklarasjon av peker og opprettelse av arrayobjektet. Representasjon av array i Java

Innhold uke 4. INF 1000 høsten 2011 Uke 4: 13. september. Deklarasjon av peker og opprettelse av arrayobjektet. Representasjon av array i Java INF høsten 2 Uke 4: 3. september Grunnkurs i Objektorientert Programmering Institutt for Informatikk Universitetet i Oslo Siri Moe Jensen og Arne Maus Mål for uke 4: Innhold uke 4 Repetisjon m/ utvidelser:

Detaljer

Programmeringsspråket C

Programmeringsspråket C Programmeringsspråket C Bakgrunn Implementasjon av Unix ved AT&Ts laboratorium i Palo Alto 1960 75. Navnet kommer fra BCPL B C. Opphavsmannnen heter Dennis Ritchie. ANSI standard i 1988; omtrent alle følger

Detaljer

Visuell Programmering: Kom i gang med Processing

Visuell Programmering: Kom i gang med Processing Visuell Programmering: Kom i gang med Processing Et enkelt program: Syntaks introdusert: Kommentarer, print(), println(), size(). + Start opp processing + Skriv en åpningskommentar på toppen av programmet

Detaljer

Forelesning inf1000 - Java 1

Forelesning inf1000 - Java 1 Litt Java-historikk Forelesning inf1000 - Java 1 Tema: Javas historie Bestanddelene i et Java-program Programvariabler Ole Christian Lingjærde, 22. august 2012 The Green Team I 1991 opprettet Sun Microsystems

Detaljer

INF Våren Li' repe$sjon om Tråder og GUI. Stein Gjessing, Ins$tu' for informa$kk, Universitetet i Oslo. Ins$tu' for informa$kk

INF Våren Li' repe$sjon om Tråder og GUI. Stein Gjessing, Ins$tu' for informa$kk, Universitetet i Oslo. Ins$tu' for informa$kk INF1010 - Våren 2015 Li' repe$sjon om Tråder og GUI Stein Gjessing,, Universitetet i Oslo 1 GUI, tråder og hendelser Op-sys (Win, Linux,..) Ditt Program sin Event Dispatch Thread Hver ting brukeren gjør

Detaljer

Forkurs INF1010. Dag 2. Andreas Færøvig Olsen Gard Inge Rosvold Institutt for Informatikk, 14.

Forkurs INF1010. Dag 2. Andreas Færøvig Olsen Gard Inge Rosvold Institutt for Informatikk, 14. Forkurs INF1010 Dag 2 Andreas Færøvig Olsen (andrefol@ifi.uio.no) Gard Inge Rosvold (gardir@ifi.uio.no) Institutt for Informatikk, 14. januar 2016 Forkurs INF1010 - dag 2 Feilmeldinger 2 Forkurs INF1010

Detaljer

som jobbet nærmest døgnet rundt i 18 måneder i Menlo Park i California for å forberede den neste bølgen innen computing.

som jobbet nærmest døgnet rundt i 18 måneder i Menlo Park i California for å forberede den neste bølgen innen computing. The Green Team Litt Java-historikk I 1991 opprettet Sun Microsystems en arbeidsgruppe som jobbet nærmest døgnet rundt i 18 måneder i Menlo Park i California for å forberede den neste bølgen innen computing.

Detaljer

Litt Java-historikk. Litt Java-historikk. Ulike varianter for ulike behov. Litt Java-historikk. The Green Team

Litt Java-historikk. Litt Java-historikk. Ulike varianter for ulike behov. Litt Java-historikk. The Green Team The Green Team Litt Java-historikk I 1991 opprettet Sun Microsystems en arbeidsgruppe som jobbet nærmest døgnet rundt i 18 måneder i Menlo Park i California for å forberede den neste bølgen innen computing.

Detaljer

Tåke (Fog) Grunnleggende Grafikk Våren Tåke. pname og param. OpenGL innebygde tåke støtte som. Må enable tåke. Sett tåke tilstander

Tåke (Fog) Grunnleggende Grafikk Våren Tåke. pname og param. OpenGL innebygde tåke støtte som. Må enable tåke. Sett tåke tilstander Tåke (Fog) OpenGL innebygde tåke støtte som Grunnleggende Grafikk Våren 2007 Tåke og OpenGL Extensions Blender hver piksel med tåke fargen, bruker blend faktor som er avhengig av distansen til kamera,

Detaljer

Kapittel 8: Programutvikling

Kapittel 8: Programutvikling Kapittel 8: Programutvikling Redigert av: Khalid Azim Mughal (khalid@ii.uib.no) Kilde: Java som første programmeringsspråk (3. utgave) Khalid Azim Mughal, Torill Hamre, Rolf W. Rasmussen Cappelen Akademisk

Detaljer

Lokalt Koordinatsystem. Grunnleggende Grafikk Våren 2007. Transformasjoner, Matriser og Scenegraf

Lokalt Koordinatsystem. Grunnleggende Grafikk Våren 2007. Transformasjoner, Matriser og Scenegraf Lokalt Koordinatsstem Grunnleggende Grafikk Våren 27 Transformasjoner, Matriser og Scenegraf Arnt Roald Kristoffersen arntrk@hin.no D339 ITE 165 Grunnleggende Grafikk for Spillprogrammering og ITE153 Datamaskingrafikk

Detaljer

Dagens tema Kapittel 8: Objekter og klasser

Dagens tema Kapittel 8: Objekter og klasser Dagens tema Kapittel 8: Objekter og klasser Hva er objekter og klasser? Programmering med objekter Klassedeklarasjoner Generering av objekter Tilgang til elementer i objektene Objekt- og klassevariable

Detaljer

INF1000 EKSTRATILBUD. Stoff fra uke 1-5 (6) 3. oktober 2012 Siri Moe Jensen

INF1000 EKSTRATILBUD. Stoff fra uke 1-5 (6) 3. oktober 2012 Siri Moe Jensen INF1000 EKSTRATILBUD Stoff fra uke 1-5 (6) 3. oktober 2012 Siri Moe Jensen PLAN FOR DAGEN gjennomgå stoff fra uke 1-5(6), men med en litt annen tilnærming kun gjennomgått stoff, men vekt på konsepter og

Detaljer

Det du skal gjøre i denne oppgava er først å sette opp bakgrunnen til spillet og så rett og slett å få firkanter til å falle over skjermen.

Det du skal gjøre i denne oppgava er først å sette opp bakgrunnen til spillet og så rett og slett å få firkanter til å falle over skjermen. Tetris Introduksjon Processing Introduksjon Lag starten på ditt eget tetris spill! Det du skal gjøre i denne oppgava er først å sette opp bakgrunnen til spillet og så rett og slett å få firkanter til å

Detaljer

Operativsystemer og grensesnitt

Operativsystemer og grensesnitt Operativsystemer og grensesnitt Ulike måter å bruke OS'et på Application Program Interface (API) Applikasjoner (ofte C-programmer) som f.eks. emacs, som bruker tjenestene i OS ved å kalle på funksjoner

Detaljer

Argumenter fra kommandolinjen

Argumenter fra kommandolinjen Argumenter fra kommandolinjen Denne veiledningen er laget for å vise hvordan man kan overføre argumenter fra kommandolinjen til et program. Hvordan transportere data fra en kommandolinje slik at dataene

Detaljer

Fra Python til Java. En introduksjon til programmeringsspråkenes verden. Dag Langmyhr

Fra Python til Java. En introduksjon til programmeringsspråkenes verden. Dag Langmyhr Fra Python til Java En introduksjon til programmeringsspråkenes verden dag@ifi.uio.no Oversikt Introduksjon Python Java Noe er likt Noe bare ser anderledes ut Noe er helt forskjellig Et eksempel Klasser

Detaljer

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.

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. 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. Før du starter må du kopiere filen graphics.py fra http://www.ii.uib.no/~matthew/inf1092014

Detaljer

1. Introduksjon til J2ME

1. Introduksjon til J2ME Avdeling for informatikk og e-læring, Høgskolen i Sør-Trøndelag Introduksjon til J2ME Tomas Holt 31.08.2009 Lærestoffet er utviklet for faget SO350D J2ME for programmering av mobile enheter 1. Introduksjon

Detaljer

INF 1000 høsten 2011 Uke september

INF 1000 høsten 2011 Uke september INF 1000 høsten 2011 Uke 2 30. september Grunnkurs i Objektorientert Programmering Institutt for Informatikk Universitetet i Oslo Siri Moe Jensen og Arne Maus 1 INF1000 undervisningen Forelesningene: Første

Detaljer

IN1010. Fra Python til Java. En introduksjon til programmeringsspråkenes verden Dag Langmyhr

IN1010. Fra Python til Java. En introduksjon til programmeringsspråkenes verden Dag Langmyhr IN1010 Fra Python til Java En introduksjon til programmeringsspråkenes verden dag@ifi.uio.no Oversikt Introduksjon Python Java Noe er likt Noe bare ser anderledes ut Noe er helt forskjellig Et par eksempler

Detaljer

OPPGAVE 1 OBLIGATORISKE OPPGAVER (OBLIG 1) (1) Uten å selv implementere og kjøre koden under, hva skriver koden ut til konsollen?

OPPGAVE 1 OBLIGATORISKE OPPGAVER (OBLIG 1) (1) Uten å selv implementere og kjøre koden under, hva skriver koden ut til konsollen? OPPGAVESETT 4 PROSEDYRER Oppgavesett 4 i Programmering: prosedyrer. I dette oppgavesettet blir du introdusert til programmering av prosedyrer i Java. Prosedyrer er også kjent som funksjoner eller subrutiner.

Detaljer

INF1000 undervisningen INF 1000 høsten 2011 Uke september

INF1000 undervisningen INF 1000 høsten 2011 Uke september INF1000 undervisningen INF 1000 høsten 2011 Uke 2 30. september Grunnkurs i Objektorientert Programmering Institutt for Informatikk Universitetet i Oslo Siri Moe Jensen og Arne Maus Forelesningene: Første

Detaljer

GUI («Graphical User Interface»)

GUI («Graphical User Interface») GUI («Graphical User Interface») Om GUI JavaFX Se også på Infoskrivet https://www.uio.no/studier/emner/matnat/ ifi/in1010/v18/gui/fx-intro-in1010.pdf Programkoden i https://www.uio.no/studier/emner/ matnat/ifi/in1010/v18/gui/

Detaljer

Sprettende ball Introduksjon Processing PDF

Sprettende ball Introduksjon Processing PDF Sprettende ball Introduksjon Processing PDF Introduksjon: I denne modulen skal vi lære et programmeringsspråk som heter Processing. Det ble laget for å gjøre programmering lett for designere og andre som

Detaljer

Programmeringsspråket C

Programmeringsspråket C Programmeringsspråket C Programmeringsspråket C Implementasjon av Unix ved AT&Ts laboratorium i Palo Alto 1960 75. Navnet kommer fra BCPL B C. Opphavsmannnen heter Dennis Ritchie. ANSI-standard i 1988;

Detaljer

Programmeringsspråket C

Programmeringsspråket C Programmeringsspråket C Programmeringsspråket C Laget til implementasjon av Unix ved AT&Ts Bell labs i Palo Alto 1969 73. Navnet kommer fra BCPL B C. Opphavsmannnen heter Dennis Ritchie. ANSI-standard

Detaljer

www.ir.hiof.no/~eb/viz.htm Side 1 av 12

www.ir.hiof.no/~eb/viz.htm Side 1 av 12 VIZhtm Side 1 av 12 Innhold Side MÅL 1 OPPGAVE / RESULTAT 1 BESKRIVELSE ØVING 6A 2 BESKRIVELSE ØVING 6B 9 BESKRIVELSE ØVING 6C 12 MÅL Når du har utført denne øvingen, skal du kunne: Benytte et kamera som

Detaljer

Tetris. Introduksjon. Skrevet av: Kine Gjerstad Eide. Lag starten på ditt eget tetris spill!

Tetris. Introduksjon. Skrevet av: Kine Gjerstad Eide. Lag starten på ditt eget tetris spill! Tetris Skrevet av: Kine Gjerstad Eide Kurs: Processing Introduksjon Lag starten på ditt eget tetris spill! Det du skal gjøre i denne oppgava er først å sette opp bakgrunnen til spillet og så rett og slett

Detaljer

Hvordan en prosessor arbeider, del 1

Hvordan en prosessor arbeider, del 1 Hvordan en prosessor arbeider, del 1 Læringsmål Kompilator, interpret og maskinkode CPU, registre Enkle instruksjoner: de fire regnearter Mer informasjon om temaet Internett Lokalnett (LAN) Mitt program

Detaljer

UNIVERSITETET I OSLO

UNIVERSITETET I OSLO UNIVERSITETET I OSLO Det matematisk-naturvitenskapelige fakultet Eksamen i INF330 Metoder i grafisk databehandling og diskret geometri Eksamensdag: 3. desember 010 Tid for eksamen: 14.30 18.30 Oppgavesettet

Detaljer

UNIVERSITETET I OSLO

UNIVERSITETET I OSLO UNIVERSITETET I OSLO Side 1 Det matematisk-naturvitenskapelige fakultet Eksamen i: INF1010 Objektorientert programmering Eksamensdag: Onsdag 4. juni 2014 Tid for eksamen: 9:00-15:00 Oppgavesettet er på

Detaljer

Skilpaddekunst. Steg 1: Møt skilpadden. Sjekkliste. Introduksjon. Turtles

Skilpaddekunst. Steg 1: Møt skilpadden. Sjekkliste. Introduksjon. Turtles Skilpaddekunst Introduksjon Skilpadder (turtles på engelsk) er en form for roboter som har vært i bruk innen programmering i lang tid. Vi vil bruke skilpadde-biblioteket i Python til å utforske flere programmeringskonsepter

Detaljer

MAT-INF 1100: Obligatorisk oppgave 1

MAT-INF 1100: Obligatorisk oppgave 1 8. september, 2005 MAT-INF 1100: Obligatorisk oppgave 1 Innleveringsfrist: 23/9-2005, kl. 14:30 Informasjon Den skriftlige besvarelsen skal leveres på ekspedisjonskontoret i 7. etg. i Niels Henrik Abels

Detaljer

UNIVERSITETET I OSLO Det matematisk-naturvitenskapelige fakultet

UNIVERSITETET I OSLO Det matematisk-naturvitenskapelige fakultet UNIVERSITETET I OSLO Det matematisk-naturvitenskapelige fakultet Eksamen i : INF 101 - Grunnkurs i objektorientert programmering Eksamensdag : Tirsdag 4. juni 2002 Tid for eksamen : 09.00-15.00 Oppgavesettet

Detaljer

Introduksjon til objektorientert programmering

Introduksjon til objektorientert programmering Introduksjon til objektorientert programmering Samt litt mer om strenger og variable INF1000, uke6 Ragnhild Kobro Runde Grunnkurs i objektorientert programmering Strategi: Splitt og hersk Metoder kan brukes

Detaljer

Læringsmål uke 7. Objektorientert programmering i Python: Introduksjon. Innhold uke 7. Lite tilbakeblikk: Programflyt og skop

Læringsmål uke 7. Objektorientert programmering i Python: Introduksjon. Innhold uke 7. Lite tilbakeblikk: Programflyt og skop Læringsmål uke 7 Objektorientert programmering i Python: Introduksjon IN1000 Høst 2018 uke 7 Siri Moe Jensen Kjenne til motivasjon og bakgrunn for objektorientert programmering Kunne definere en klasse,

Detaljer

HØGSKOLEN I SØR-TRØNDELAG

HØGSKOLEN I SØR-TRØNDELAG HØGSKOLEN I SØR-TRØNDELAG Avdeling for informatikk og e-læring Kandidatnr: Eksamensdato: 14.desember 2007 Varighet: 0900-1200 Fagnummer: Fagnavn: Klasser: LO347D Web-applikasjoner med Java EE Nettstudenter

Detaljer

AVDELING FOR INGENIØRUTDANNING EKSAMENSOPPGAVE

AVDELING FOR INGENIØRUTDANNING EKSAMENSOPPGAVE AVDELING FOR INGENIØRUTDANNING EKSAMENSOPPGAVE Emne: Informatikk II Emnekode: LO325E Faglig veileder: G.Milvang og H.Hemmer Gruppe(r): 2EA,2EB,2EC Dato:12.12.03 Eksamenstid:9 00-14 00 Eksamensoppgaven

Detaljer

LC191D Videregående programmering Høgskolen i Sør-Trøndelag, Avdeling for informatikk og e-læring. Else Lervik, januar 2012.

LC191D Videregående programmering Høgskolen i Sør-Trøndelag, Avdeling for informatikk og e-læring. Else Lervik, januar 2012. Repetisjon innkapsling static tabell av primitiv datatype LC191D Videregående programmering Høgskolen i Sør-Trøndelag, Avdeling for informatikk og e-læring. Else Lervik, januar 2012. Objektorientert modellering

Detaljer

HØGSKOLEN I SØR-TRØNDELAG

HØGSKOLEN I SØR-TRØNDELAG HØGSKOLEN I SØR-TRØNDELAG Avdeling for informatikk og e-læring Målform: Eksamensdato: Bokmål 9.mai 202 Varighet/eksamenstid: 0900-300 Emnekode: Emnenavn: Klasse(r): Studiepoeng: LC9D/LO9D Videregående

Detaljer

HØGSKOLEN I SØR-TRØNDELAG

HØGSKOLEN I SØR-TRØNDELAG HØGSKOLEN I SØR-TRØNDELAG Avdeling for informatikk og e-læring - AITeL Kandidatnr: Eksamensdato: 4.mai 2011 Varighet: 0900-1300 Emnekode: Emnenavn: Klasse(r): LO191D / LC191D Campus: LC191D Videregående

Detaljer

Plan for dagen. Vprg 4. Dagens tema - filbehandling! Strømmer. Klassen FilLeser.java. Tekstfiler

Plan for dagen. Vprg 4. Dagens tema - filbehandling! Strømmer. Klassen FilLeser.java. Tekstfiler Plan for dagen Vprg 4 LC191D Videregående programmering Høgskolen i Sør-Trøndelag Avdeling for informatikk og e-læring Anette Wrålsen Del: Intro til tekstfiler Del II: Mer om tekstfiler, Scanner-klassen

Detaljer

Bildebehandling med Python og EzGraphics

Bildebehandling med Python og EzGraphics Bildebehandling med Python og EzGraphics I denne oppgaven skal dere jobbe med bildebehandling. På samme måte som vi jobbet med lyd tidligere, skal vi nå se på bilder. Vi kan bruke EzGraphics til alt vi

Detaljer

Komme igang med App Inventor Introduksjon App Inventor PDF

Komme igang med App Inventor Introduksjon App Inventor PDF Komme igang med App Inventor Introduksjon App Inventor PDF Introduksjon Dette er en introduksjon til MIT App Inventor, hvor du skal lære å lage applikasjoner til Android. Å lage apps i App Inventor er

Detaljer

Leksjon 2. Setninger og uttrykk

Leksjon 2. Setninger og uttrykk 6108 Programmering i Java Leksjon 2 Setninger og uttrykk Del 2 Roy M. Istad 2015 Uttrykk, operatorer og verdier int tall = 3; int x = 1 + tall; // x er 4 Uttrykk: Variabler, verdier, konstanter og metodekall

Detaljer

IN1010. Fra Python til Java. En introduksjon til programmeringsspråkenes verden Dag Langmyhr

IN1010. Fra Python til Java. En introduksjon til programmeringsspråkenes verden Dag Langmyhr IN1010 Fra Python til Java En introduksjon til programmeringsspråkenes verden dag@ifi.uio.no Oversikt Introduksjon Python Java Noe er likt Noe bare ser anderledes ut Noe er helt forskjellig Et par eksempler

Detaljer

Bilder for Tekstur Mapping. Grunnleggende Grafikk Våren 2007

Bilder for Tekstur Mapping. Grunnleggende Grafikk Våren 2007 Bilder for Tekstur Mapping Grunnleggende Grafikk Våren 2007 Til og med versjon 1.5 av OpenGL Oppløsningen må være opphøyd i andre (2^X): 2,4,8,16,32,64,128,256,... Teksturer 256 x 256 pixels Arnt Roald

Detaljer

INF1000 Metoder. Marit Nybakken marnybak@ifi.uio.no 16. februar 2004

INF1000 Metoder. Marit Nybakken marnybak@ifi.uio.no 16. februar 2004 INF1000 Metoder Marit Nybakken marnybak@ifi.uio.no 16. februar 2004 Motivasjon Når man begynner å skrive store programmer, vil man fort oppleve at programmene blir uoversiktlige. Det blir vanskeligere

Detaljer

1 t:n'v'\ekode LO325E. Alle ~vne og trykte. GOd'"j(jent kalkulator

1 t:n'v'\ekode LO325E. Alle ~vne og trykte. GOd'j(jent kalkulator 1 t:n'v'\ekode j Emne: 11nformatiklc Il LO325E I Faglig veileder Hilde Hemmer 1 Gruppe(r) I DOtO:14~1~ E ksamenstld 900-1400 I Eksamen~pgaven består av: Antall sider (Inkl forsiden og vedlegg):6 Antal

Detaljer

TDT4100 Objektorientert programmering

TDT4100 Objektorientert programmering Eksamensoppgave i TDT4100 Objektorientert programmering Tirsdag 2. juni 2009, kl. 09:00-13:00 Oppgaven er utarbeidet av faglærer Hallvard Trætteberg og kvalitetssikrer Trond Aalberg. Kontaktperson under

Detaljer

HØGSKOLEN I SØR-TRØNDELAG

HØGSKOLEN I SØR-TRØNDELAG HØGSKOLEN I SØR-TRØNDELAG Avdeling for informatikk og e-læring - Kandidatnr: AITeL Eksamensdato: 2.desember 2009 Varighet: 0900-1300 Emnekode: Emnenavn: Klasse(r): LO191D / LC191D LO191D Videregående programmering

Detaljer

INF våren 2017

INF våren 2017 INF1010 - våren 2017 Om Java Objekter og klasser Både for deg som kan og for deg som ikke kan Java Stein Gjessing Universitetet i Oslo Ny versjon etter forlesningen der tre meningsløse private modifikatorer

Detaljer

INF Notater. Veronika Heimsbakk 10. juni 2012

INF Notater. Veronika Heimsbakk 10. juni 2012 INF1010 - Notater Veronika Heimsbakk veronahe@student.matnat.uio.no 10. juni 2012 1 Tilgangsnivåer 2 CompareTo Modifier Class Package Subclass World public Y Y Y Y protected Y Y Y N no modifier Y Y N N

Detaljer

Rull-en-ball Introduksjon Unity PDF

Rull-en-ball Introduksjon Unity PDF Rull-en-ball Introduksjon Unity PDF Rull-en-ball Denne uka skal vi lage vårt første spill! Spillet går ut på å være en ball og samle inn kuber for å få poeng. Spillet er over når man har samlet inn alle

Detaljer

Forkurs INF1010. Dag 1. Andreas Færøvig Olsen Tuva Kristine Thoresen

Forkurs INF1010. Dag 1. Andreas Færøvig Olsen Tuva Kristine Thoresen Forkurs INF1010 Dag 1 Andreas Færøvig Olsen (andrefol@ifi.uio.no) Tuva Kristine Thoresen (tuvakt@ifi.uio.no) Institutt for Informatikk, 6. januar 2014 Forkurs INF1010 - dag 1 Hello, World! Typer Input/output

Detaljer

MAT-INF 1100: Obligatorisk oppgave 1

MAT-INF 1100: Obligatorisk oppgave 1 3. september, 2004 MAT-INF 1100: Obligatorisk oppgave 1 Innleveringsfrist: 17/9-2004, kl. 14:30 Informasjon Den skriftlige besvarelsen skal leveres på ekspedisjonskontoret i 7. etg. i Niels Henrik Abels

Detaljer

Hvorfor objektorientert programmering? Objektorientert programmering i Python: Introduksjon. Læringsmål uke 7. Undervisning og pensum IN1000

Hvorfor objektorientert programmering? Objektorientert programmering i Python: Introduksjon. Læringsmål uke 7. Undervisning og pensum IN1000 Objektorientert programmering i Python: Introduksjon IN1000 Høst 2019 uke 7 Siri Moe Jensen Læringsmål uke 7 Kjenne til motivasjon og bakgrunn for objektorientert programmering Kunne definere en klasse,

Detaljer

INF1000: Forelesning 7

INF1000: Forelesning 7 INF1000: Forelesning 7 Klasser og objekter del 2 Konstruktører Static UML REPETISJON 2 Repetisjon Repetisjon forts. Verden består av objekter av ulike typer (klasser). Ofte er det mange objekter av en

Detaljer

UNIVERSITETET I OSLO

UNIVERSITETET I OSLO UNIVERSITETET I OSLO Det matematisk-naturvitenskapelige fakultet Eksamen i Eksamensdag: 6. juni 2006 Tid for eksamen: 1430 1730 Oppgavesettet er på 6 sider. Vedlegg: INF1010 Objektorientert programmering

Detaljer

AVDELING FOR INGENIØRUTDANNING EKSAMENSOPPGAVE

AVDELING FOR INGENIØRUTDANNING EKSAMENSOPPGAVE AVDELING FOR INGENIØRUTDANNING EKSAMENSOPPGAVE Emne: Informatikk II Emnekode: LO334E Faglig veileder: Hilde Hemmer Gruppe(r): 2EA,2EB,2EC Dato:14.12.04 Eksamenstid: 9 00-12 00 Eksamensoppgaven består av:

Detaljer

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

EKSAMENSOPPGAVE. : INF-1400 Objektorientert programmering. Oppgavesettet er på 5 sider inklusiv forside FAKULTET FOR NATURVITENSKAP OG TEKNOLOGI! EKSAMENSOPPGAVE Eksamen i : INF-1400 Objektorientert programmering Dato : Mandag 27. mai 2013 Tid : 0900 1300 Sted : Åsgårdvegen 9 Tillatte hjelpemidler : Ingen

Detaljer

Repitisjonskurs. Arv, Subklasser og Grensesnitt

Repitisjonskurs. Arv, Subklasser og Grensesnitt Repitisjonskurs Arv, Subklasser og Grensesnitt Subklasser Klasser i OO-programmering representerer typer av objekter som deler et sett med egenskaper. En subklasse har egenskapene til en klasse + ett sett

Detaljer

INF Obligatorisk oppgave 2

INF Obligatorisk oppgave 2 INF3320 - Obligatorisk oppgave 2 Innleveringsfrist: 23. september (Revisjon 4. september 2003) I denne oppgaven skal vi se på transformasjoner og interaktivitet. Vi skal lage et lite program som implementerer

Detaljer

Forkurs INF1010. Dag 2. Andreas Færøvig Olsen Tuva Kristine Thoresen

Forkurs INF1010. Dag 2. Andreas Færøvig Olsen Tuva Kristine Thoresen Forkurs INF1010 Dag 2 Andreas Færøvig Olsen (andrefol@ifi.uio.no) Tuva Kristine Thoresen (tuvakt@ifi.uio.no) Institutt for Informatikk, 7. januar 2014 Forkurs INF1010 - dag 2 Klasser og pekere Klasser

Detaljer

EKSAMEN I FAG TDT4180 - MMI Lørdag 4. juni 2005 Tid: kl. 0900-1300

EKSAMEN I FAG TDT4180 - MMI Lørdag 4. juni 2005 Tid: kl. 0900-1300 Side 1 av 7 NORGES TEKNISK-NATURVITENSKAPELIGE UNIVERSITET INSTITUTT FOR DATATEKNIKK OG INFORMASJONSVITENSKAP Faglig kontakt under eksamen: Dag Svanæs, Tlf: 73 59 18 42 EKSAMEN I FAG TDT4180 - MMI Lørdag

Detaljer