MSPEL Föreläsning 5. 3D programmering. Den tredje dimensionen. Den tredje dimensionen

Relevanta dokument
En dokumentation om Java 3D API

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

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

Java: Utvecklingsverktyg, datatyper, kontrollstrukturer

Grafiska pipelinen. Edvin Fischer

ITK:P1 Föreläsning 8. Verktyget Javadoc. Kommentarer för Javadoc. Multimedia för spelkonstruktion

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

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

Grafik raytracing. Mattias Axblom.

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

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

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

JAVA Mer om klasser och objektorientering

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

Lösningsförslag till tentamen

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

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

TENTAMEN PROGRAMMERING I JAVA, 5P SOMMARUNIVERSITETET

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

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

Kort introduktion till POV-Ray, del 1

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

ITK:P1 Föreläsning 1. Programmering. Programmeringsspråket Java. Stark typning Explicit typning Strukturerat Hög säkerhet

Programmering för Språkteknologer II. Innehåll. Associativa datastrukturer. Associativa datastrukturer. Binär sökning.

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

Laboration 4: Digitala bilder

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

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

Föreläsning 4. Klass. Klassdeklaration. Klasser Och Objekt

Tentamen TNM061, 3D-grafik och animering för MT2. Onsdag 20/ kl SP71. Inga hjälpmedel

DGI/SUDOA Den historiska utvecklingen. Globala - lokala belysningsmodeller. Lokala belysningsmodeller. Rendering equation

Dagens program. Programmeringsteknik och Matlab. Vad är arv? Vi ärver från GregorianCalendar. Kan vi bygga vidare på existerande klasser?

2D-grafik. Gustav Taxén

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

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

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

Föreläsning 2 Objektorienterad programmering DD1332. Typomvandling

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

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.

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

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

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

(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

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

Borttagning av skymda ytor Painter s Algorithm och Z-buffering. MICHAEL HJORTHOLT och ANDREAS PAULSSON

Föreläsning 3: Radiometri och fotometri

Försättsblad till skriftlig tentamen vid Linköpings Universitet

Bézierkurvor och parametriska objektrepresentationer

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

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

Föreläsningsmaterial (Arv) Skrivet av Andreas Lund

System.out.println("Jaså du har "+ antaldollar + " stycken.");

Lösningsförslag övning 2.

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

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

Frivillig Java-swing-Graphics-lab Programmeringsteknik MN1 vt02

Objektorienterad programmering. Fält som funktionsresultat. Mer om fält: att uppdatera ett parameterfält. Kontrast: Parametrar av primitiv typ

TDDC30. Kursledning Kursledare: Jonas Lindgren. Labassistent: Jonas Lindgren Labassistent: Niklas Holma Labassistent: Erik Nilsson

Klasser i Java kan ha metoder och egenskaper. Metoder beskriver funktioner som klassen kan utföra. Egenskaper beskriver innehållet i klassen.

Dugga i Grundläggande programmering STS, åk

Praktikum i programmering

OOMPA 2D1359 Föreläsning 3

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.

Konvexa höljet Laboration 6 GruDat, DD1344

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

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

"if"-satsen. Inledande programmering med C# (1DV402)

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

ID1004 Laboration 3, 5-6 November 2012

Innehållsförteckning

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

TDDC30 Programmering i Java, Datastrukturer och Algoritmer Lektion 3

Händelsestyrda program

Tentamen i Grundläggande programmering STS, åk 1 lördag

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

Datatyper. Programmering. Att definiera datatyper i Java. Laddade partiklar. (x,y) (Rx,Ry) hh.se/db2004

Lösningsförslag till tentamen

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

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

Föreläsning 5-6 Innehåll

Föreläsning REPETITION & EXTENTA

Laboration 1: Figurer i hierarki

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

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

Föreläsning 2, vecka 8: Repetition

2D1339 Programkonstruktion för F1, ht 2004

Tentamen. Grundläggande programmering i Java A 5p, DTAA

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

Grundläggande programmering DVG A08 & ISG A04. Allmän information. Å vem är jag då. Karlstads Universitet, Johan Öfverberg 1

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

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

Iteration while-satsen

Robin Wahlstedt Datavetenskap / Spel Vetenskapsmetodik rwt07001@student.mdh.se. Datorgrafik i spel

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

Storskalig multi-touch

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

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

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

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

Inkapsling tumregler. Åtkomstmodifikatorer, instantiering, referenser, identitet och ekvivalens, samt klassvariabler. public och private

Transkript:

MSPEL Föreläsning 5 3D programmering DSV Peter Mozelius 1 Den tredje dimensionen Babylonierna hade byggnadsritningar som stentavlor redan för ca 4000 år sedan Grekerna vidareutvecklade dessa grafiska idéer vidare för ca 2000 år sedan Men att uttrycka detta matematiskt kom igång först under renässansen Det vi fortfarande använder för datorgrafik formulerades av René Descartes 2 Den tredje dimensionen Cartesiska koordinater X-, Y- och Z-koordinater Projicering av 3D-objekt på 2D-ytor som exempelvis en datorskärm I datorer behöver vi även modeller för en realistisk återgivning av ljus och skuggor i våra 3D-världar 3 1

Ljusmodeller i 3D-världar Två ljusmodeller för 3D-grafik 1.) Ray Tracing eller strålspårning En beräkningsmodell för hur varje pixel i en 3D-värld påverkas av en ljuskälla 2.) Radiosity eller radiositet En modell som ger en mer realistisk återgivning men som är beräkningsintensiv 4 Skuggmodeller Ju mer processorkraft desto finare och mer realistisk skuggåtergivning I väljer vi skuggåtergivning med hjälp av konstanterna: SHADE_FLAT SHADE_SMOOTH SHADE_GOURAUD 5 Ljuskällor Ambient light Samma intensitet åt alla håll och på samtliga ställen. För att beskriva hur ljus reflekteras från objekt. Directional light För ljus från en avlägsen ljuskälla med enbart en riktning (som solen) Konstant ljusvektor 6 2

Ljuskällor Ljuskällor med icke-konstant ljusvektor där ljusintensiteten är beroende av avståndet Point light eller punktljus En modell för att efterlikna glödlampor, stearinljus mm, källan har en position Spot light en specialisering av Point light 7 Z-buffer algoritmen 3D-rendering är beräkningsintensiv Behov av att effektivisera renderingen Man försöker undvika att räkna på pixlar i objekt som är skymda i Z-led Algoritmer för Hidden Surface Removal På svenska: Borttagning av skymda ytor Vanligast är: Z-buffer algoritmen 8 en standard extension som har blivit ett samarbetsprojekt: https://java3d.dev.java.net/ Hämtas hem från: http://java.sun.com/javase/technologies/desktop/java3d/ OpenGL (mest oberoende) Direct3D (snabbare i Windows) QuickDraw3D (Mac) Paus 15 min? 9 3

De två grundläggande paketen är: javax.vecmath med stöd för vektorbaserad matematik com.sun.j3d.utils med över hundra klasser för: 3D-primitiver som kuber och sfärer Grundläggande 3D-operationer 10 Vid en installation av så läggs bl a följande filer in: vecmath.jar j3dcore.jar j3dutils.jar j3daudio.jar 11 Simple Universe Ett enkelt litet universum som inkluderar ett Locale objekt 12 4

I Locale finns det koordinatsystem där enheten 1.0f ska motsvara 1 meter API:t har en strikt hierarki och det är endast objektet BranchGroup som kan hängas in under en Locale Med en kombination av Branchgroups modulariserar du dina 3D-världar 13 Under en BranchGroup går det sedan att lägga in en TransformGroup En TransformGroup är en speciell nod i API:t som möjliggör saker som rotation, förflyttning och skalning av 3D-objekt En TransformGroup arbetar med matematiska matrisberäkningar 14 Klassen Shape3D Definierar visuella objekt Är en klass av typen Leaf Ett Shape3D-objekt består av: Geometry Appearance Shape3D(), Shape3D(Geometry g) Shape3D(Geometry g, Appearance a) 15 5

Java 3D primitiver finns i com.sun.j3d.utils.geometry Box(); Cone(float radie, float hojd); Cylinder(float radie, float hojd); Sphere(float radie, Appearance app); Färg eller ytmaterial i ett Appearance 16 Klassen Appearance styr renderingen Sätt färg på ett objekt med hjälp av en instans av Appearance: Appearance app = new Appearance(); ColoringAttributes ca; ca = new ColoringAttributes(); ca.setcolor(r, G, B); app.setcoloringattributes(ca); 17 Att rotera ett 3D-objekt görs med: 1.) En RotationInterpolator 2.) Ett Alphaobjekt new RotationInterpolator( Alpha a, TransformGroup tg); Alphaobjektet synkroniserar rotationstiden 18 6

Om du har en RotationInterpolator och t ex vill få den att snurra i X-led så gör detta med en Transform3D: Transform3D rotor; rotor = new Transform3D(); rotor.rotx(double vinkel); Vinkeln ska anges i radianer 19 För att öka realismen i 3D-världarna så arbetar man med: textures (engelska) ytmaterial (svenska) Om ett fotorealistiskt ytmaterial först skapas som en JPEG-bild metall.jpg Så kan det sedan laddas in genom: TextureLoader( metall.jpg, RGB,this); 20 Det finns två olika sätt att lägga in text 1.) Klassen Text2D Uppbyggd av polygoner som kan kläs med ytmaterial 2.) Klassen Text3D Skapar tredimensionell grafik med hjälp av en instans av FontExtrusion Paus 21 7

Äpplen som Applikationer I paketet com.sun.j3d.utils.applet finns klassen MainFrame Din kod blir körbar som både Applet och Applikation genom: public static void main(string[] args){ Frame f = new MainFrame( new Klass(), bredd, hojd); } 22 Grader - Radianer 1 radian är ett cirkelsegment som är lika långt som cirkelns radie: 1 varv = 2 * π radianer = 6.283 radianer 180 grader = π radianer = 3.142 radianer 90 grader = π/2 radianer = 1.571 radianer 45 grader = π/4 radianer = 0.785 radianer 23 Interaktion i 3D-världarna Ett enkelt sätt för musinteraktion är med com.sun.j3d.utils.behaviors.mouse.*; Användbar kod för att kunna göra lite annorlunda lösningar av Uppgift4g: MouseRotate rotera = new MouseRotate(); mintransformgroup.addchild(rotera); 24 8

Ett enkelt komigångexempel import java.awt.*; import java.applet.*; import javax.vecmath.*; import javax.media.j3d.*; import com.sun.j3d.utils.geometry.*; import com.sun.j3d.utils.universe.*; import com.sun.j3d.utils.applet.mainframe; public class Xempel3D extends Applet{ 25 Ett enkelt komigångexempel public void init(){ setsize(400,300); setlayout(new BorderLayout()); GraphicsConfiguration gconfig = SimpleUniverse.getPreferredConfiguration(); Canvas3D c3d = new Canvas3D(gConfig); add("center", c3d); SimpleUniverse su = new SimpleUniverse(c3D); 26 Ett enkelt komigångexempel //Initiera till ett passande betraktningsavstånd su.getviewingplatform(). setnominalviewingtransform(); //Lägg till en BranchGraph med en färgad kube su.addbranchgraph( makebranchgraphwithcolorcube()); }//init 27 9

Ett enkelt komigångexempel //Skapa en BranchGroup med en färgad kub BranchGroup makebranchgraphwithcolorcube(){ BranchGroup bg = new BranchGroup(); ColorCube cc = new ColorCube(0.5); bg.addchild(cc); return bg; }//makebranchgraphwithcolorcube 28 Ett enkelt komigångexempel //det ska även gå att köra som applikation public static void main(string args[]){ new MainFrame(new Xempel3D(), 400, 300); } }//klass Xempel3D Tack för idag! 29 10