1 MSPEL Föreläsning 5 DSV Peter Mozelius 3D – programmering.

Slides:



Advertisements
Liknande presentationer
hej och välkomna EKVATIONER Ta reda på det okända talet.
Advertisements

Klasser och objekt.
Kap 2 – Trigonometri och grafer
Next previous Internetprogrammering 2000 Internetprogrammering 2000 Föreläsning 10 Distribuerad programmering med Javas RMI, Remote Method Invocation.
Fortsättningskurs i Programmering lektion 6
Klassarv och inkapsling
V E R S I O N N R 1. 2 T A V E L I D É E R I M I L J Ö.
Repetition av objektorientering
Objektorienterad utveckling Lektion 2 Objekt, överlagring, överskuggning, klasshierarkier och dynamisk bindning KTH Peter Mozelius.
Elkraft 7.5 hp distans: Kap. 3 Likströmsmotorn 3:1
Metoder i java Det finns två typer av metoder i java
Välkommen Vahid Mosavat
Programmeringsteknik för K och Media
Föreläsning 13 Allt om tentan. Sistaminutenhjälp: På fredag 17 december kl 12 sitter Linda i kemi-fiket och svarar på frågor.
Swing Grafik delen i Java kallas för Swing. Swing är stort; ca 800 klasser i 16 paket. Swing är en utveckling av AWT (Abstarct Window Toolkit). AWT var.
Att programmera i språket Java
1 ITK:P1 Föreläsning 4 Grafiska gränssnitt och händelsehantering DSV Peter Mozelius.
Föreläsning 8 Appletprogram/fristående grafiska program Rita linjer, rektanglar mm Skriva text Byta färg Appletprogram html.
Föreläsning 2 Primitiva datatyper Variabler och konstanter Tilldelning Inläsning Operatorer Villkorssatsen if Slingor: while och for.
1 ITK:P1 Föreläsning 6 Layoutmodeller i Java DSV Marie Olsson.
1 Föreläsning 6 Klass Object, instans av klass public/private Klassvariabler och klassmetoder.
V E R S I O N N R 2. 0 T A V E L I D É E R I M I L J Ö.
Alice in Action with Java
Föreläsning 13 Polymorfism, Paket och JAR-filer. Polymorfism Ordet härstammar från grekiskan Poly – många Morf – form Polymorf – många former Någonting.
Jonny Karlsson INTRODUKTION TILL PROGRAMMERING Föreläsning 7 ( ) INNEHÅLL: -Klasser och instansvariabler -Tabeller av klassobjekt.
INFÖR NATIONELLA PROVET
Föreläsning 11 Arrayer.
Objektorienterad programmering i Java
OOP F4:1 Marie Olsson OOP Objekt-orienterad programmering Föreläsning 4 Metoder klass-metoder instans-metoder.
Datasamlingar och generiska enheter
Föreläsning 2 Kort Översikt Över Javaspråket. Källkodsformat Unicode används åäöμψζ tillåtna Inte alla miljöer klarar av det Källkod Bytekod Java VM för.
1 ITK:P1 Föreläsning 7 Algoritmer och datastrukturer DSV Marie Olsson.
Vektorer (klassen Vector) Sortering
Arv.
TÄNK PÅ ETT HELTAL MELLAN 1-50
Programmeringsteknik för Media1 & K1
1 Joomla © 2009 Stefan Andersson 1. 2 MÅL 2 3 Begrepp Aktör: en användare som interagerar med webbplatsen. I diagrammet till höger finns två aktörer:
PROCESSPROGRAMMERING Föreläsning ‏ Innehåll: Högnivå objekt för trådprogrammering: - Trådgrupper (”Thread pools”)‏ - Exekverare (Executor.
1 Föreläsning 7 Repetition Instansvariabler och klassvariabler Klassmetoder och Instansmetoder.
1 MSPEL Lektion 2 DSV Peter Mozelius Spel i Java applets.
Mitt första Java program Mahmud Al Hakim Copyright, Mahmud Al Hakim, 1.
Jonny Karlsson INTRODUKTION TILL PROGRAMMERING Föreläsning 7 ( ) INNEHÅLL: -Klasser -Att definiera egna klasser -Klassvariabler -Klassmetoder.
Jonny Karlsson GRUNDKURS I PROGRAMMERING MED JAVA Föreläsning 9 ( ) INNEHÅLL: -Tabeller av klassobjekt -Användning av Java API specifikationen.
1 Föreläsning 6 Programmeringsteknik och Matlab 2D1312/2D1305 Metoder & parametrar Array API och klassen ArrayList.
1 Föreläsning 5 Programmeringsteknik och Matlab 2D1312/2D1305 Repetition Metoder Array API och klassen ArrayList.
1 ITK:P1 Föreläsning 8 Multimedia för spelkonstruktion DSV Peter Mozelius.
Next previous RMI, Remote Method Invocation Om du har boken av Marty Hall, läs avsnitt 15.8 För fler exempel se:
Föreläsning 1 Reserverade ord Javas API Identifierare Litteraler Variabler Kompilering och interpretering.
Föreläsning 5 Arrayer & ArrayList Hur man använder API:n
Föreläsning 9 Gränssnitt. Super Super kan användas till anrop av en omdefinierad metod Super kan användas till anrop av konstruktorer i superklassen Super.
Informationsteknologi - Lektion 2 Trådlöst nätverk (WLAN) Trådlöst nätverk (WLAN) Filarkivet: Filarkivet:
OOP F14:1 Stefan Möller OOP Objekt-orienterad programmering Föreläsning 14 Repetition Tips inför inlämningsuppgift 2.
Föreläsning 4 Klasser Och Objekt.
1 ITK:P2 F6 Sortering av generiska containerklasser DSV Peter Mozelius.
1. Ett problem/uppgift.
Räkna till en miljard 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13,14,15,16,17,18,19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, En miljard är ett.
© Anders Broberg, Ulrika Hägglund, Lena Kallin Westin, 2003 Föreläsning 12 Sökning och Sökträd.
ITK:P1 Föreläsning 2 Introduktion till objektorientering DSV Marie Olsson.
1 Objektorienterad programmering i Java Föreläsning 5 Kort om Java-Applets.
PROCESSPROGRAMMERING Föreläsning 1 ( )‏ Innehåll: Introduktion till paralellprogrammering (“concurrent programming”)‏ Introduktion till parallellprogrammering.
Föreläsning 13 Appletprogram/fristående grafiska program Arv Rita linjer, rektanglar mm Skriva text, byta färg Appletprogram & HTML Grafiska användargränssnitt.
Föreläsning 9 Arv kap 8.1 Interface kap 9.2 Grafiska användargränssnitt (GUI) kap 10.
2I1073 Lektion 1 KTH-MI Peter Mozelius XHTML, stilmallar och Javascript.
1 Jan Lundström OV’s Hemsida Utbildning Ledare. 2 Jan Lundström OV’s Hemsida Standard Lagrum.
När infaller Julafton och hur ofta?
Övning 3. Repetition Metoder class RepetitionMetoder { public static void main(String [] args) double längd = 2.0; double bredd = 1.0; double area =
Föreläsning 5 Objekt Klasser Konstruktorer Metoder Minnesbilder av objekt.
Programmeringsteknik för K och Media
Föreläsning 7 programmeringsteknik och Matlab 2D1312/2D1305 Metoddeklaration och parametrar Arrayer och ArrayList.
Föreläsning4 Repetition slingor Metoder. while-sats består av följande delar: 1. while 2. Villkor-sats (condition) 3. uttryck (statement) while-sats int.
Presentationens avskrift:

1 MSPEL Föreläsning 5 DSV Peter Mozelius 3D – programmering

2 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

3 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

4 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 En modell som ger en mer realistisk återgivning men som är beräkningsintensiv

5 Skuggmodeller  Ju mer processorkraft desto finare och mer realistisk skuggåtergivning  I Java 3D API väljer vi skuggåtergivning med hjälp av konstanterna:  SHADE_FLAT  SHADE_SMOOTH  SHADE_GOURAUD

6 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

7 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

8 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

9 Java 3D API  Java 3D API är en standard extension  Som hämtas hem från:   OpenGL (mest oberoende)  Direct3D (snabbare i Windows)  QuickDraw3D (Mac) Paus 15 min ?

10 Java 3D API  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

11 Java 3D API  Vid en installation av Java 3D API så läggs bl a följande filer in:  vecmath.jar  j3dcore.jar  j3dutils.jar  j3daudio.jar  J3D.dll  j3daudio.dll

12 Java 3D API  Simple Universe Locale  Ett enkelt litet universum som inkluderar ett Locale objekt

13 Java 3D API  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

14 Java 3D API  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

15 Java 3D API Shape3D  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)

16 Java 3D API  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);  Appearance Färg eller ytmaterial i ett Appearance

17 Java 3D API 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);

18 Java 3D API  Att rotera ett 3D-objekt görs med:  1.) En RotationInterpolator  2.) Ett Alphaobjekt new RotationInterpolator( Alpha a, TransformGroup tg); Alphaobjektet synkroniserar rotationstiden

19 Java 3D API  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); radianer  Vinkeln ska anges i radianer

20 Java 3D API  För att öka realismen i 3D-världarna så arbetar man med:  textures  textures (engelska)  ytmaterial  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);

21 Java 3D API  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 ?

22 Ä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); }

23 Grader - Radianer  1 radian är ett cirkelsegment som är lika långt som cirkelns radie:  1 varv = 2 *  radianer = radianer  180 grader =  radianer = radianer  90 grader =  /2 radianer = radianer  45 grader =  /4 radianer = radianer

24 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);

25 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{

26 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);

27 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

28 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

29 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!