OpenGL, Maya och specialeffekter

Storlek: px
Starta visningen från sidan:

Download "OpenGL, Maya och specialeffekter"

Transkript

1 OpenGL, Maya och specialeffekter Gustav Taxén, Introduktion OpenGL är ett användbart API för att rendera grafik i realtid (om man har det rätta hårdvarustödet). Du har på tidigare kurser (förhoppningsvis) fått lära dig de grundläggande funktionerna i OpenGL: geometrispecifikation, transformationer och texturering. Målsättningen med den här labben är att du ska få en känsla för hur man kan använda 3D-data från Maya i ett OpenGL-program och få en kort introduktion till ett par vanliga realtids-specialeffekter. Eftersom OpenGL saknar möjlighet att importera 3D-data från program som Maya måste man som applikationsprogrammerare själv ordna med detta. Om man har ett välspecificerat 3D-format brukar dock detta mest handla om handarbete, så i den här labben får du tillgång till ett hjälpbibliotek, Wasa, som ordnar detta (och som dessutom har en massa annan användbar funktionalitet). Labben har 6 deluppgifter. Beräknad tidsåtgång är svår att sia om eftersom labben blir olika tidskrävande beroende på om man t.ex. har använt C++ tidigare. Räkna dock med att den tar minst timmar att genomföra. Om du vill köra labben på PC hemma behöver du följande: C++-kompilator med DLL-stöd (t.ex., Visual Studio) GLUT, DevIL, Boost, Wasa, Räkna inte med att du kan få handledning kring PC-relaterade problem!

2 Innan du börjar Lägg till relevanta moduler Gör module add gcc module add devtools module add glut i ditt shell-fönster. gcc- och devtools-modulerna ger tillsammans tillgång till en kompilator, g++, som vi kommer att använda. GLUT bör du ha kommit i kontakt med tidigare. Om inte, läs igenom dokumentationen på Kolla din modell Se till att du har exporterat den Maya-modell du byggde i Maya-labben till RTGformat på föreskrivet sätt. Pröva att den funkar att importera till OpenGL m.h.a. Wasa genom att göra följande. Ställ dig i den katalog där din modellfil finns och skriv /info/agi03/opengl/wasa/tests/modelviewer modelfile där modelfile är din modellfil (ska ha extensionen.rtg). Ser modellen konstig ut eller programmet avslutas med ett felmeddelande har du förmodligen inte exporterat den på ett korrekt sätt. Kontakta Pär (paer@nada.kth.se) eller Gustav (gustavt@nada.kth.se) för att få hjälp eller kopiera modellen brood.rtg som finns i katalogen /info/agi03/opengl/models till din labbkatalog tillsammans med texturen som hör till och använd dem istället. Se till att du har lite koll på C++ När du gör labben kommer du att bli tvungen att använda C++. Om du inte kan C++ finns en bra introduktion för Java-programmerare på En annan introduktion finns här: En utmärkt C++-bok för nybörjare är Lippman, S., C++ Primer (3:e uppl.), Addison- Wesley. Det finns också en mycket bra C++-FAQ och C++-tips här:

3 Du kommer också att behöva använda några funktioner i standardbiblioteket i C++. Det som tidigare kallades Standard Template Library (STL) är numera integrerat i ANSIs C++-standard, som förutom container-klasser också innehåller klasser för I/O, m.m. Information om standardbiblioteket finns bl.a. här: Läs speciellt igenom informationen som rör string och vector och enkel I/Ohantering. Vill man veta mer om skillnaden mellan "traditionell" C++ och ANSI-C++ kan man gå hit: Wasa utnyttjar ett hjälpbibliotek som heter Boost för att få en säkrare minneshantering (i Boost ingår också en mängd andra väldigt användbara verktyg). Du bör läsa igenom den Boost-dokumentation som rör delade pekare (shared pointers). Informationen finns på följande plats: Gå till och följ länkarna Documentation memory smart_ptr Documentation shared_ptr. Delade pekare fungerar i stort sett som vanliga pekare, med skillnaden att Boost håller reda på vilka pekare som är aktiva: då alla aktiva pekare gått ur scope avallokeras minnet automatiskt. Detta påminner mycket om Javas minneshantering: i Java skapar man nya klassinstanser med operatorn new, medan minnet avallokeras av Java automatiskt med hjälp av garbage collection. Se till att du har lite koll på Wasa Läs den bifogade Wasa-dokumentationen! Referensinformation i HTML-format finns i katalogen /info/agi03/opengl/wasa/doc. och i katalogen /info/agi03/opengl/wasa/tests finns ett par exempelprogram som använder Wasa. För den som inte kan C++ ger exemplen ger också en inblick i hur C++-kod kan se ut.

4 Uppgift 1 Få GLUT och OpenGL att fungera under C++ Den första uppgiften är att initiera och använda GLUT i ett C++-program. Gör så här: Skapa en katalog att ha dina labbfiler i, t.ex. ~/agilabb/. Kopiera upp samtliga filer från /info/agi03/opengl/skal/ till din labbkatalog. Öppna filen agi.cc i emacs. Det är i den här filen du kommer att arbeta. Extensionen.cc indikerar att det program du skriver är i C++. (Om du vill arbeta i en fil med ett annat namn eller använda fler källkodsfiler måste du ändra i den Makefile som finns i /info/agi03/opengl/skal.) Som du ser är är filen agi.cc ganska tom. Börja med att göra ett GLUT-skal som öppnar ett fönster och ritar något med hjälp av OpenGL. Utnyttja gärna att du redan har gjort ett sådant program i DGI/DOA/GRIP-kursen. Kompilera ditt program genom att skriva make. Eventuellt kommer du att få några Wasa-relaterade varningar, men dessa behöver du inte bry dig om. Däremot bör du kontrollera alla varningar (och fixa fel!) som uppstått i din egen källkod. (C++kompilatorer varnar normalt mer än C-kompilatorer och hittar ofta fler fel!). Kontrollera att ditt program fungerar. Om du inte använt C++ tidigare är det här ett utmärkt tillfälle att pröva olika typer av C++-konstruktioner. Pröva t.ex. att skapa en ny klass och skapa en delad pekare till en ny klassinstans. Testa att ändra ett värde på en av medlemmarna i klassen (eller anropa en metod) genom att använda operatorn ->. Använd en utskrift i destruktorn för att kontrollera att klassen avallokeras automatiskt av Boost. (I C++ görs normalt utskrifter genom att man skickar strängar och värden till std::cout med <<-operatorn.) Titta också på exempelkoden i /info/agi03/opengl/wasa/tests eller sök efter C++-exempel på nätet.

5 Uppgift 2 Importera och rita en Maya-modell Nu ska vi använda Wasa för att importera din Maya-modell. Gör så här: Om du inte redan gjort det, läs Wasa-dokumentationen. Se till att ditt program har using namespace wasa; using namespace boost; efter #include-raderna i ditt program. Om du inte vet vad namespaces är, läs igenom introduktionen på Se till att initwasa() finns före raden glutmainloop(). Det är viktigt att Wasa initieras innan du börjar använda det. Det är också viktigt att Wasa initieras efter att OpenGL har initierats. OpenGL initieras när man skapar ett fönster med glutcreatewindow(). Lägg till en global variabel shared_ptr<modeldata> model; model kommer att vara vår pekare till den data som finns i din 3D-fil. Vi behöver komma åt denna data när vi ritar ut modellen i display()-funktionen. Lägg till raderna VertexSetFormat fmt; fmt.wantnormals(); fmt.wanttexcoords(0, 2); model = parse("mymodel.rtg", fmt, true); direkt efter raden initwasa(). Ersätt mymodel.rtg med namnet på din modellfil. Dessa programrader specificerar att Wasa ska läsa normaler och 2Dtexturkoordinater från din modellfil. Om den sista parametern till parse() är satt till true kommer Wasa att skriva ut information om 3D-filen när den parsas. Den första parametern till wanttexcoords() indikerar att det är texturkoordinater för texturenhet 0 som avses. På moderna grafikkort finns oftast mer än en texturenhet så att flera texturer kan kombineras ihop i ett enda renderingspass i OpenGL. Vi kommer bara att använda den första texturenheten i den här labben (och dessutom stöder NADAs Sun-workstations bara en texturenhet än så länge).

6 I din display()-funktion, se till att du använder och aktiverar ljussättning. Lägg nu till raderna unsigned int i; unsigned int n = model->getnumberofindexsets(); for (i = 0; i < n; i++) { shared_ptr<indexset> iset = model->getindexset(i); Material m = model->getmaterial(i); m.glmaterial(gl_front_and_back); iset->gldrawelements(); } Dessa rader går igenom varje IndexSet (se Wasa-dokumentationen) som finns i modellfilen, hämtar dess materialparametrar och anropar glmaterial() med motsvarande värden. Metoden gldrawelements() aktiverar en s.k. vertex array i OpenGL och ritar primitiverna. I display()-funktionen, se till att OpenGL-kameran är placerad så att den kan se modellen. Det innebär att du måste ta hänsyn till hur stor du byggde modellen i Maya och var du placerade den i förhållande till världsorigo. Glöm inte heller att du kan behöva ändra på klipp-planens position i gluperspective(). Programmet ska nu rita ut din modell. Ändra nu programmet så att det också aktiverar texturering. Använd Wasas Imageklass för att läsa in texturen. Image-klassen stöder formaten JPG, GIF, BMP, DCX, DDS, WAD, ICO, LIF, MDL, PCD, PCX, PIC, PIX, PNM, PSD, PSP, PXR, RAW, SGI, TGA, WAL, och XPM. Information om hur man får tag i bilddata och skickar den till OpenGL finns i Wasa-dokumentationen och i exemplet /info/agi03/opengl/wasa/tests/modelviewer Om det ser ut som om texturen inte "sitter rätt" beror det förmodligen på att texturbildfilen är felvänd i y-led: de flesta bildformat har origo i övre vänstra hörnet, medan OpenGL förutsätter att origo sitter i nedre vänstra hörnet. Image-klassen ger möjlighet att vända bilder efter det att de laddats från fil. Du kan också vända bilden i ett ritprogram, men tänk på att den då också blir felvänd om du skulle vilja gå tillbaka och använda den i Maya.

7 Uppgift 3 Arbeta med indexerade primitiver Så här långt har vi ett program som ritar ut modelldata, men vi har inte tittat närmare på hur denna data ser ut. När man arbetar med 3D-grafik måste man ofta arbeta med modelldata som inte riktigt passar det projekt man arbetar med, och då måste man manipulera den på olika sätt, t.ex. reducera antalet polygoner eller transformera hörnen. Om du inte redan gjort det, läs Wasa-dokumentationen som rör klassen VertexSet och klasshierarkin där IndexSet är rotklass. Dessa klasser bygger direkt ovanpå den mekanism som oftast används för att specificera geometri i Direct3D och OpenGL. Mekanismen kallas vertex/index buffers i Direct3D och vertex arrays i OpenGL. Hur vertex arrays fungerar i OpenGL finns att läsa på När du tycker att du har koll på hur mekanismen med indexerade primitiver fungerar, gör följande: Spara en kopia av ditt program. Direkt efter att modelldata har lästs in (d.v.s., efter du anropat funktionen parse()), lägg till programkod som stegar igenom varje hörn i din modell. För varje hörn, gör följande: antag att hörnets position är (x, y, z). Uppdatera hörnets position så att den blir (x', y', z') = f(x, y, z) där du väljer någon intressant funktion f(), t.ex. f(x, y, z) = (xy, y, zy). Detta görs enklast genom att du för varje IndexSet i din modell använder metoden getvertexset() för att få tag i hörnen. Sedan kan du stega igenom hörnen med hjälp av metoden getposition3() och ändra positionen med metoden setposition(). Ta reda på hur många hörn som finns i ditt VertexSet med metoden getnumberofvertices(). NOT: Om du transformerar hörnen kommer normalerna att bli felaktiga, så att ljussättningen kan se konstig ut. Det är överkurs att försöka fixa till det men du får gärna försöka om du vill! Kontrollera att programmet ritar ut modellen precis som förut, fast med modifierade hörn enligt din funktion f(x, y, z). Spara en kopia av denna exekverbara fil och motsvarande källkod för redovisningen och arbeta nu vidare med en ny kopia av din backup. Som du förhoppningsvis vet sedan tidigare, kan man använda sig av s.k. back-face culling för att effektivisera utritning av polygonmodeller. Det innebär att man med hjälp av hörnens ordning tar reda på om polygonen är riktad mot eller från kameran. Aktivera nu back-face culling i ditt program genom att använda kommandot glenable(gl_cull_face). Kompilera om och försök avgöra om programmet tycks gå fortare (du kan använda Wasas WTimer-klass om du vill mäta skillnaden).

8 En förutsättning för att backface culling ska fungera är att hörnen konsekvent är specificerade i motsols ordning. För att testa denna princip ska du nu ändra ordningen på den första triangeln i din modell så att den hamnar i medsols ordning. Gör så här: RTG-parsen skapar data av typen TriangleList som är en subklass av IndexSet. Du kan förutsätta att alla IndexSet som parse() returnerar är av denna typ (man kan kontrollera genom att anropa metoden getgeomtype()). För att komma åt funktionaliteten i TriangleList via din IndexSet-pekare måste du genomföra en s.k. dynamisk typecast. Detta påminner mycket om hur man i Java använder operatorn instanceof för att avgöra om det är OK att göra en downcast. Lägg till följande rader i ditt program efter parse()-raden: shared_ptr<indexset> iset = model->getindexset(0); shared_ptr<trianglelist> tlist; tlist = shared_dynamic_cast<trianglelist>(iset); Du kan nu komma åt TriangleList-metoderna via pekaren tlist, men kolla först att tlist är skilt från 0 - annars misslyckades din typecast! (NOT: Om du kompilerar programmet med Visual C++ måste du aktivera RTTI RunTime Type Information för att dynamisk casting ska funka.) Motsvarande kod i Java skulle se ut ungefär så här: IndexSet iset = model.getindexset(0); TriangleList tlist; if (iset instanceof TriangleList) { tlist = (TriangleList)iset; } Hämta de tre index som motsvarar triangel 0 med hjälp av metoden gettriangle(). Ändra ordning på dem så att de hamnar i "motsatt riktning" genom att använda metoden settriangle(). Gör motsvarande operation för triangel 1 och 2. Kompilera om och kör programmet. Kontrollera att tre trianglar tycks ha "försvunnit". Ta bort aktiveringen av back-face culling och kontrollera att de syns igen. Spara undan en kopia av din exekverbara fil och källkod för redovisningen och arbeta vidare med en ny kopia av din backup.

9 Uppgift 4 Alternativ belysningsmodell Resten av labben handlar om hur man kan använda OpenGL kreativt för att åstadkomma ett par olika specialeffekter. Först ska vi använda oss av s.k. multipass rendering för att åstadkomma en mer avancerad belysningsmodell än den som finns i OpenGL. Sedan ska vi skapa illusionen av att modellen speglas i ett golvplan. Till sist ska vi utnyttja s.k. environment mapping för att få modellen att se spegelblank ut. För en ljuskälla L, och för var och en av komponenterna R, G, och B, har OpenGLs belysningsmodell för ett hörn formen (något förenklat) Color = A + D + S A = A L k A D = max(l N, 0) D L k D S = max(h N, 0) shininess S L k S där A L, D L och S L är ljuskällans värden för GL_AMBIENT, GL_DIFFUSE resp. GL_SPECULAR. k A, k D och k S är motsvarande värden för materialet. L är riktningen mot ljuskällan, N är normalen i hörnet och H är summan av riktningsvektorn mot ljuskällan och vektorn som pekar mot kamerapositionen (alla vektorer är normerade). Texturer appliceras på följande sätt: för en primitiv, säg en triangel, beräknas först färgen i varje hörn med hjälp av ljusättningsmodellen. Dessa färger interpoleras sedan linjärt över triangeln. Om man har aktiverat texturering och angett GL_MODULATE till funktionen gltexenv() kommer färgen i varje pixel att multipliceras med texturens färg då interpoleringen görs. Detta gör att också s.k. specular highlights multipliceras med texturens färg. Men ofta vill man att highlighten ska ligga "ovanpå" ytdetaljerna för att den ska synas bättre. I den vänstra bilden nedan används vanlig texturering: highlighten "försvinner" in i texturen. I den högra ligger highlighten "ovanpå" texturen. Vi vill alltså applicera specular-komponenten efter det att modellen texturerats. Ett sätt att göra detta är att rita ut modellen två gånger och summera resultaten. Gör så här:

10 Aktivera texturering och ambient-kompnenten i materialet. Kolla Wasadokumentationen för Material-klassen för att se hur du får tag i materialdata. Eftersom din modell har textur har Maya-exporten satt diffuse-komponenten till 0, så ändra den till (1, 1, 1, 1) genom att anropa den OpenGLs glmaterialfv()- funktion på vanligt sätt. Rita ut modellen. Efter första utritningen, ändra djuptestet så att det testar GL_EQUAL istället för GL_LESS. Varför det är nödvändigt att göra så? Förklara här: Stäng av texturering ambient+diffuse-komponenterna i materialet. Hämta specularkomponenten från Wasa-materialet och aktivera den. Aktivera färgblandning och välj blandningsfaktorer så att inkommande fragmentfärg adderas med den fragmentfärg som finns i färgbufferten. Rita ut modellen igen. Återställ djuptestet och stäng av färgblandning. Om du ritat en "specular map" när du gjorde Maya-labben, applicera den på andra renderingspasset, d.v.s. modulera specular-komponenten med en annan textur än diffuse-komponenten. Som ett alternativ till en egen specular-textur kan du använda filen /info/agi03/opengl/models/specularmap.jpg. Man kan sammanfatta OpenGLs klassiska belysningsmodell enligt C = T(A + D + S) där C är färg, T är texturfärg, A är ambient ljus, D matt ljus och S är speglande ljus. Beskriv på motsvarande sätt den belysningsmodell du just har implementerat:

11 Uppgift 5 - Spegelbilder Nu ska du använda OpenGLs s.k. stencilbuffert tillsammans med färgblandning för att åstadkomma en spegelbildseffekt. Bilderna nedan illustrerar hur det kan se ut. Du ska lägga till ett golvplan under din modell och modellen ska speglas i golvplanet. Det ska gå flytta kameran så att man kan se golvet från sidan; detta ska inte förstöra illusionen av spegling (därav behovet av stenciltest). Golvet ska ha en textur. För att åstadkomma spegelbildseffekten behöver du bygga upp bilden i flera lager: 1. Rita in golvpolygonen i stencilbufferten. 2. Rita ut spegelbilden, d.v.s. din modell upp-och-nervänd. 3. Rita ut golvpolygonen med färgblandning. 4. Rita ut modellen rättvänd. Tänk på att hantera djuptest och stenciltest rätt när du ritar ut dina lager, annars kan det hända att vissa lager inte syns. Ta en kopia av din källkod och den exekverbara filen för redovisning innan du fortsätter.

12 Uppgift 6 Environment mapping Till sist ska du använda s.k. environment mapping för att få din modell att se spegelblank ut. Det finns en sådan environment map i filen /info/agi03/opengl/models/envmap.jpg Låt programmet vara som tidigare, men ändra i din alternativa ljussättningsmodell så att specular-komponenten istället skapas med environment mapping, d.v.s. rendera modellen med enbart diffust ljus och texturering i första passet och addera ett andra pass där du modulerar diffuse-färgen med data från din environment map (och, förstås, aktiverar environment mapping). Om resultatet blir för ljust kan du skala ner bilddata i din environment map med Image-metoden scale(). Mer information om environment mapping i OpenGL finns här: node176.html#scene:spheremap

OpenGL, Maya och specialeffekter

OpenGL, Maya och specialeffekter OpenGL, Maya och specialeffekter Gustav Taxén, gustavt@nada.kth.se Introduktion OpenGL är ett användbart API för att rendera grafik i realtid (om man har det rätta hårdvarustödet). Du har på tidigare kurser

Läs mer

OpenGL, Maya och specialeffekter

OpenGL, Maya och specialeffekter OpenGL, Maya och specialeffekter Gustav Taxén, gustavt@nada.kth.se Introduktion OpenGL är ett användbart API för att rendera grafik i realtid (om man har det rätta hårdvarustödet). Du har på tidigare kurser

Läs mer

OpenGL AGI HT05. Gustav Taxén

OpenGL AGI HT05. Gustav Taxén OpenGL AGI HT05 Gustav Taxén gustavt@nada.kth.se OpenGL-översikt Geometri Operationer på hörn Rastrering Operationer på fragment Bilddata Operationer på bildelement Texturminne Framebuffert (bildbuffert

Läs mer

Avalanche Studios. OpenGL. Vår teknik. Våra spel. Lite inspiration... Stora, öppna spelvärldar. Sandbox-gameplay. Hög audiovisuell standard

Avalanche Studios. OpenGL. Vår teknik. Våra spel. Lite inspiration... Stora, öppna spelvärldar. Sandbox-gameplay. Hög audiovisuell standard OpenGL Avalanche Studios Sveriges ledande oberoende spelutvecklare Fokus på egenutvecklade IPn Finns på Söder i Stockholm ~6 anställda Just Cause för PS2, PC, XBox, och XBox 36 släpptes 26 Gustav Taxén

Läs mer

RTG-formatet Gustav Taxén,

RTG-formatet Gustav Taxén, RTG-formatet 2004-08-11 Gustav Taxén, gustavt@nada.kth.se Det här texten beskriver kortfattat RTG-filformatet och ett C-bibliotek som kan läsa det. RTG-formatet är ett filformat för geometribeskrivningar

Läs mer

Att använda pekare i. C-kod

Att använda pekare i. C-kod Att använda pekare i C-kod (Bör användas av de som känner sig lite hemma med C-programmering!) Rev 1, 2005-11-23 av Ted Wolfram www.wolfram.se Syfte: Man kan tycka att det är komplicerat att använda pekare

Läs mer

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

Spelutveckling 3d-grafik och modellering. Grunder för 3d-grafik Blender Animering Spelutveckling 3d-grafik och modellering Grunder för 3d-grafik Blender Animering Grunderna för 3d-grafik Positionering, transformationer Projektion, kameran Objekt i en 3d-värld Ljusmodeller för 3d-grafik

Läs mer

OpenGL-översikt. OpenGL. Viktigt att komma ihåg: OpenGL-kommandon. OpenGL är en tillståndsmaskin. Transformationer. Geometrispecifikation

OpenGL-översikt. OpenGL. Viktigt att komma ihåg: OpenGL-kommandon. OpenGL är en tillståndsmaskin. Transformationer. Geometrispecifikation OpenGL OpenGL-översikt Geometri Operationer på hörn Projective shadows Advanced Rendering Techniques Using OpenGL, SIGGRAPH Courses 997. Gustav Taxén CID gustavt@nada.kth.se Bilddata Operationer på bildelement

Läs mer

Innehåll. Introduktion till objektorientering. OOP (objektorienterad programmering) Objekt, instanser, klasser

Innehåll. Introduktion till objektorientering. OOP (objektorienterad programmering) Objekt, instanser, klasser Föreläsning 1 Innehåll Introduktion till objektorientering OOP (objektorienterad programmering) Objekt, instanser, klasser C++ OO i C++ Standardbibliotek Utökningar från C (syntaktiskt socker) Introduktion

Läs mer

Shaders. Gustav Taxén

Shaders. Gustav Taxén Shaders Gustav Taxén gustavt@csc.kth.se 2D1640 Grafik och Interaktionsprogrammering VT 2007 Shading l 2 P l 1 n v Givet en punkt P på en yta, en normal n, riktningsvektorer l i mot ljuskällor och en kamerariktning

Läs mer

OpenGL-översikt. OpenGL. Lokala koordinatsystem. Transformationer. Hierarkiska modeller. Animation. Transformation Byte av koordinatsystem

OpenGL-översikt. OpenGL. Lokala koordinatsystem. Transformationer. Hierarkiska modeller. Animation. Transformation Byte av koordinatsystem OpenGL OpenGL-översikt Geometri Operationer på hörn DOOM 3 id Software, 2004 (?). Gustav Taxén CID gustavt@nada.kth.se Bilddata Operationer på bildelement Rastrering Texturminne Operationer på fragment

Läs mer

Det finns många flaggor till g++,

Det finns många flaggor till g++, C++, Övning 1 Jonas Sjöbergh, jsh@nada.kth.se Inge Frick, inge@nada.kth.se Alexander Baltsatsis hur man kompilerar och kör make preprocessor minnesallokering, pekare grundläggande C++, funktioner m.m.

Läs mer

Shaders. Renderingssystem. Renderingssystem. Renderingssystem. Hårdvara för 3D-rendering. Hårdvara för 3D-rendering

Shaders. Renderingssystem. Renderingssystem. Renderingssystem. Hårdvara för 3D-rendering. Hårdvara för 3D-rendering Shaders Renderingssystem Applikation Geometri Rastrering Martin Fitger d00-mfi@d.kth.se VT 2008, DH2323 / DH2640 / NA8740 Renderingssystem Renderingssystem Applikation Per-vertex operationer Geometri Rastrering

Läs mer

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

Varför behövs grafikbibliotek? Introduktion till OpenGL. OpenGL är ett grafikbibliotek. Fördelar med OpenGL. Allmänt om OpenGL. Nackdelar med OpenGL Introduktion till OpenGL Battlezone Atari corp., 1980. Gustav Taxén CID gustavt@nada.kth.se Varför behövs grafikbibliotek? Grafikhårdvara Skillnader i funktionalitet och möjligheter. Skillnader i styrning.

Läs mer

Programmering i C++ Kompilering från kommandoraden

Programmering i C++ Kompilering från kommandoraden Programmering i C++ Kompilering från kommandoraden Sven Gestegård Robertz Datavetenskap, LTH 9 november 2015 Sammanfattning Ibland vill man, av olika anledningar, inte använda en stor integrerad utvecklingsmiljö

Läs mer

Grafiska pipelinen. Edvin Fischer

Grafiska pipelinen. Edvin Fischer Grafiska pipelinen Edvin Fischer Sammanfattning Rapporten behandlar den grafiska pipelinen och dess steg, vilka stegen är och hur de funkar. Inledning Rapporten har till syfte att beskriva hur den grafiska

Läs mer

Programmering B med Visual C++ 2008

Programmering B med Visual C++ 2008 Programmering B med Visual C++ 2008 Innehållsförteckning 1 Repetition och lite nytt...5 I detta kapitel... 5 Programexekvering... 5 Loop... 5 Källkod... 6 Verktyg... 6 Säkerhetskopiera... 6 Öppna, kompilera,

Läs mer

ID1004 Laboration 3, 5-6 November 2012

ID1004 Laboration 3, 5-6 November 2012 18-okt-2012/FK ID1004 Laboration 3, 5-6 November 2012 Labben bör göras individuellt. Beräknad tid ca 2 timmar. Instruktionen antar att labben utförs i datasal, med hjälp av den integrerade utvecklingsmiljön

Läs mer

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

Tentamen TNM061, 3D-grafik och animering för MT2. Tisdag 3/ kl 8-12 TP51, TP52, TP54, TP56, TP41, TP43. Inga hjälpmedel Tentamen TNM061, 3D-grafik och animering för MT2 Tisdag 3/6 2014 kl 8-12 TP51, TP52, TP54, TP56, TP41, TP43 Inga hjälpmedel Tentamen innehåller 8 uppgifter, vilka tillsammans kan ge maximalt 50 poäng.

Läs mer

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

Tentamen TNM061, 3D-grafik och animering för MT2. Onsdag 20/ kl SP71. Inga hjälpmedel Tentamen TNM061, 3D-grafik och animering för MT2 Onsdag 20/8 2014 kl 14-18 SP71 Inga hjälpmedel Tentamen innehåller 7 uppgifter, vilka tillsammans kan ge maximalt 50 poäng. För betyg G (registreras som

Läs mer

I rastergrafikens barndom...gjorde man grafik genom att skriva i ett videominne. Operationer på buffert och pixlar. Idag... Varför grafikkort?

I rastergrafikens barndom...gjorde man grafik genom att skriva i ett videominne. Operationer på buffert och pixlar. Idag... Varför grafikkort? Operationer på buffert och pixlar I rastergrafikens barndom......gjorde man grafik genom att skriva i ett videominne. Lapped textures Emil Praun et al., SIGGRAPH 2000. Gustav Taxén CID gustavt@nada.kth.se

Läs mer

Lab5 för prgmedcl04 Grafik

Lab5 för prgmedcl04 Grafik Lab5 för prgmedcl04 Grafik Viktigt läs detta först:den här labblydelsen är ganska lång, detta betyder inte att labben tar lång tid.en hel del av lydelsen är anvisning om hur man går tillväga för att kunna

Läs mer

Verktyg och Utvecklingsmiljö. Föreläsning 2 Eclipse

Verktyg och Utvecklingsmiljö. Föreläsning 2 Eclipse Verktyg och Utvecklingsmiljö Föreläsning 2 Eclipse Verktyg Modern programutveckling innebär att man måste behärska ett antal verktyg. Editorer Kompilatorer Avlusare(debugger) Versionshantering(kommer i

Läs mer

Labb i Datorsystemteknik och programvaruteknik Programmering av kalkylator i Visual Basic

Labb i Datorsystemteknik och programvaruteknik Programmering av kalkylator i Visual Basic Labb i Datorsystemteknik och programvaruteknik Programmering av kalkylator i Visual Basic Inledning Starta Microsoft Visual Studio 2005. Välj create Project Välj VB + Vindows Application och välj ett nytt

Läs mer

Rastrering och displayalgoritmer. Gustav Taxén

Rastrering och displayalgoritmer. Gustav Taxén Rastrering och displayalgoritmer Gustav Taxén gustavt@csc.kth.se 2D1640 Grafik och Interaktionsprogrammering VT 2007 Klippning Man vill undvika att rastrera de primitiver som hamnar utanför fönstret. Man

Läs mer

TDP005 Projekt: Objektorienterat system

TDP005 Projekt: Objektorienterat system . TDP005 Projekt: Objektorienterat system Laboration i Make och CMake Författare Filip Strömbäck Höstterminen 2016 Version 1.0 2016-10-04 Introduktion I denna lab kommer vi titta närmare på två verktyg

Läs mer

Laboration 4: Digitala bilder

Laboration 4: Digitala bilder Objektorienterad programmering, Z : Digitala bilder Syfte I denna laboration skall vi återigen behandla transformering av data, denna gång avseende digitala bilder. Syftet med laborationen är att få förståelse

Läs mer

Kompilering och exekvering. Föreläsning 1 Objektorienterad programmering DD1332. En kompilerbar och körbar java-kod. Kompilering och exekvering

Kompilering och exekvering. Föreläsning 1 Objektorienterad programmering DD1332. En kompilerbar och körbar java-kod. Kompilering och exekvering Föreläsning 1 Objektorienterad programmering DD1332 Introduktion till Java Kompilering, exekvering, variabler, styrstrukturer Kompilering och exekvering Ett program måste översättas till datorns språk

Läs mer

OpenGL-översikt. Mer OpenGL. Består-av-hierarki. Hierarkiska modeller. Från hierarki till kod, steg 1. Lokala koordinatsystem

OpenGL-översikt. Mer OpenGL. Består-av-hierarki. Hierarkiska modeller. Från hierarki till kod, steg 1. Lokala koordinatsystem Mer OpenGL OpenGL-översikt Geometri Operationer på hörn Projective shadows Advanced Rendering Techniques Using OpenGL, SIGGRAPH Courses 997. Gustav Taxén CID gustavt@nada.kth.se Bilddata Operationer på

Läs mer

Introduktion till After Effects

Introduktion till After Effects Introduktion till After Effects After Effects är ett bildanimeringsprogram, men även ett filmredigeringsprogram. Det finns ett antal fler programutvecklare som gör redigeringsprogram för film, bland annat

Läs mer

TANA17 Matematiska beräkningar med Matlab

TANA17 Matematiska beräkningar med Matlab TANA17 Matematiska beräkningar med Matlab Laboration 1. Linjär Algebra och Avbildningar Namn: Personnummer: Epost: Namn: Personnummer: Epost: Godkänd den: Sign: Retur: 1 Introduktion I denna övning skall

Läs mer

Simulering med ModelSim En kort introduktion

Simulering med ModelSim En kort introduktion Linköpings universitet Institutionen för systemteknik Laborationer i digitalteknik Datorteknik 2017 Simulering med ModelSim En kort introduktion TSEA22 Digitalteknik D Linköpings universitet SE-581 83

Läs mer

TUTORIAL: SAMLING & KONSOLL

TUTORIAL: SAMLING & KONSOLL TUTORIAL: SAMLING & KONSOLL Denna tutorial är en fortsättning på den tutorial där vi skapade klassen Car och sedan objekt av denna klass. Vi skall nu lära oss att lagra dessa objekt i en samling och även

Läs mer

Java: Utvecklingsverktyg, datatyper, kontrollstrukturer

Java: Utvecklingsverktyg, datatyper, kontrollstrukturer Java: Utvecklingsverktyg, datatyper, kontrollstrukturer Sven-Olof Nyström Uppsala Universitet 13 juni 2005 1 Utvecklingsverktyg för Java Vi rekommenderar Suns utvecklingsverktyg (SDK, tidigare JDK), se

Läs mer

Börja med att kopiera källkoden till din scheme-katalog (som du skapade i Laboration 1).

Börja med att kopiera källkoden till din scheme-katalog (som du skapade i Laboration 1). Laboration 3 Grafiska figurer I den här laborationen skall du konstruera ett schemeprogram som kan rita rektanglar, punkter, cirklar, linjer och bilder som består utav en eller flera av nyss nämnda figurer.

Läs mer

Programsystemkonstruktion med C++: Övning 1. Karl Palmskog september 2010

Programsystemkonstruktion med C++: Övning 1. Karl Palmskog september 2010 Programsystemkonstruktion med C++: Övning 1 Karl Palmskog palmskog@kth.se september 2010 Programuppbyggnad Klassens uppbyggnad en C++-klass består av en deklaration och en definition deklaration vanligtvis

Läs mer

Alla filer som bearbetar PHP script ska avslutas med ändelsen.php, exempelvis ska en indexsida till en hemsida heta index.php

Alla filer som bearbetar PHP script ska avslutas med ändelsen.php, exempelvis ska en indexsida till en hemsida heta index.php Introlektion PHP är ett av de enklare språken att lära sig just pga. dess dynamiska struktur. Det används för att bygga upp båda stora och mindre system. Några vanliga system som använder sig av PHP är

Läs mer

Verktyg och Utvecklingsmiljö. Jochim von Hacht

Verktyg och Utvecklingsmiljö. Jochim von Hacht Verktyg och Utvecklingsmiljö Jochim von Hacht Verktyg Modern programutveckling innebär att man måste behärska ett antal verktyg Editorer Kompilatorer Avlusare (debugger) Versionhantering (kommer i projektkurs)

Läs mer

Tentamen TEN1 HI

Tentamen TEN1 HI Tentamen TEN1 HI1029 2014-03-14 Skrivtid: 8.15-13.00 Hjälpmedel: Referensblad (utdelas), papper (tomma), penna Logga in med tentamenskontot ni får av skrivvakten. Det kommer att ta tid att logga in ha

Läs mer

KARLSTADS UNIVERSITET 12/8/09 informatik & datavetenskap Johan Öfverberg, Kerstin Andersson Laboration 4, ISG A04 och DVG A08 HT-09

KARLSTADS UNIVERSITET 12/8/09 informatik & datavetenskap Johan Öfverberg, Kerstin Andersson Laboration 4, ISG A04 och DVG A08 HT-09 Laboration 4, ISG A04 och DVG A08 HT-09 Laborationen går ut på att skapa en enkel bankbok. Ni skall i bankboken kunna registrera upp till 30 transaktioner som kan bestå av insättning, uttag eller checkuttag.

Läs mer

Laboration 1 Introduktion till Visual Basic 6.0

Laboration 1 Introduktion till Visual Basic 6.0 Laboration 1 Introduktion till Visual Basic 6.0 Förberedelse Förbered dig genom att läsa föreläsningsanteckningar och de kapitel som gåtts igenom på föreläsningarna. Läs även igenom laborationen i förväg.

Läs mer

DAT043 - föreläsning 8

DAT043 - föreläsning 8 DAT043 - föreläsning 8 Paket, generics, Java collections framework 2017-02-07 Paket och tillgänglighet Ovanför klasser finns en hierarkisk namespace med paket. Filer som inte deklareras i något paket finns

Läs mer

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

Transformationer. Translation. Skalning. Homogena koordinater. Rotation. 2D-grafik. x y. Inom datorgrafik är transformationer den. Många. bevaras. Transformationer D-grafik Gustav Taén gustavt@nada.kth.se Inom datorgrafik är transformationer den kanske viktigaste formen av operation. De vanligaste transformationerna är linjära och kan skrivas som

Läs mer

Tentamen i Programmering

Tentamen i Programmering LUNDS TEKNISKA HÖGSKOLA 1(5) Institutionen för datavetenskap Tentamen i Programmering EDAA65/EDA501/EDAA20 M MD W BK L 2018 05 30, 8.00 13.00 Preliminärt ger uppgifterna 7 + 14 + 6 + 9 + 4 = 40 poäng.

Läs mer

Inledande programmering med C# (1DV402) Ditt första C#-program med Visual Studio

Inledande programmering med C# (1DV402) Ditt första C#-program med Visual Studio Ditt första C#-program med Visual Studio Upphovsrätt för detta verk Detta verk är framtaget i anslutning till kursen Inledande programmering med C# vid Linnéuniversitetet. Du får använda detta verk så

Läs mer

NetBeans 7. Avsikt. Projektfönster

NetBeans 7. Avsikt. Projektfönster NetBeans 7 Avsikt Att bekanta dig med NetBeans programmeringsmiljö, dvs att med hjälp av NetBeans 1. skapa ett nytt projekt 2. skriva in källkod (sparas som.java-fil) 3. kompilera (översätta) koden till

Läs mer

Snabbguide Visma Compact API Copyright 2006-2010 Visma Spcs AB

Snabbguide Visma Compact API Copyright 2006-2010 Visma Spcs AB Snabbguide Visma Compact API Copyright 2006-2010 Visma Spcs AB Komma igång med Compact API Hur APIet fungerar Visma Compacts API läser och skriver direkt till databasen via ett antal färdiga metoder som

Läs mer

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

732G Linköpings universitet 732G11. Johan Jernlås. Översikt. Repetition. Felsökning. Datatyper. Referenstyper. Metoder / funktioner 732G11 Linköpings universitet 2011-01-21 1 2 3 4 5 6 Skapa program Kompilera: Källkod Kompilator bytekod Köra: Bytekod Virtuell maskin Ett riktigt program Hej.java class Hej { public static void main (

Läs mer

Tentamen i TDP004 Objektorienterad Programmering Praktisk del

Tentamen i TDP004 Objektorienterad Programmering Praktisk del Tentamen i TDP004 Objektorienterad Programmering Praktisk del Datum: 2011-04-28 Tid: 08-12 Plats: SU-salar i B-huset. Jour: Per-Magnus Olsson, tel 281456 Jourhavande kommer att besöka skrivsalarna ungefär

Läs mer

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

Försättsblad till skriftlig tentamen vid Linköpings Universitet Försättsblad till skriftlig tentamen vid Linköpings Universitet (fylls i av ansvarig) Datum för tentamen Sal Tid Kurskod Provkod Kursnamn/benämning Institution Antal uppgifter i tentamen Antal sidor på

Läs mer

NetBeans 5.5. Avsikt. Projektfönster

NetBeans 5.5. Avsikt. Projektfönster NetBeans 5.5 Avsikt Att bekanta dig med NetBeans programmeringsmiljö, dvs att med hjälp av NetBeans 1. skapa ett nytt projekt 2. skriva in källkod (sparas som.java-fil) 3. kompilera (översätta) koden till

Läs mer

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

LÖSNINGSFÖRSLAG Programmeringsteknik För Ing. - Java, 5p UMEÅ UNIVERSITET Datavetenskap 010530 LÖSNINGSFÖRSLAG Programmeringsteknik För Ing. - Java, 5p Betygsgränser 3 21,5-27 4 27,5-33,5 5 34-43 Uppgift 1. (4p) Hitta de fel som finns i nedanstående klass (det

Läs mer

En introduktion till OpenGL. Gustav Taxén gustavt@csc.kth.se

En introduktion till OpenGL. Gustav Taxén gustavt@csc.kth.se En introduktion till OpenGL Gustav Taxén gustavt@csc.kth.se 2D164 Grafik och Interaktionsprogrammering VT 27 Labb 4 görs på PC! Följ det nya labbpeket - eller: Följ stegen i labbpeket för labb 5 för att

Läs mer

grundläggande C++, funktioner m.m.

grundläggande C++, funktioner m.m. C++, Övning 1 Jonas Sjöbergh, jsh@nada.kth.se hur man kompilerar och kör make preprocessor minnesallokering, pekare grundläggande C++, funktioner m.m. ett exempel Ett enkelt program i C++, hello.cpp #include

Läs mer

PROCEDUELL TERRÄNG. Proceduella metoder för bilder (TNM084) Jimmy Liikala Institutionen för teknik och naturvetenskap

PROCEDUELL TERRÄNG. Proceduella metoder för bilder (TNM084) Jimmy Liikala Institutionen för teknik och naturvetenskap PROCEDUELL TERRÄNG Proceduella metoder för bilder (TNM084) Jimmy Liikala (jimli570@student.liu.se) Institutionen för teknik och naturvetenskap Sammanfattning Rapporten beskriver hur en proceduell terräng

Läs mer

Ett enkelt program i C++, hello.cpp. #include <iostream> int main() { std::cout << "Hello World\n"; return 0; } C++, Övning 1

Ett enkelt program i C++, hello.cpp. #include <iostream> int main() { std::cout << Hello World\n; return 0; } C++, Övning 1 Ett enkelt program i C++, hello.cpp C++, Övning 1 Jonas Sjöbergh, jsh@nada.kth.se hur man kompilerar och kör make preprocessor minnesallokering, pekare grundläggande C++, funktioner m.m. ett exempel int

Läs mer

Static vs Dynamic binding Polymorfism. Objekt-orienterad programmering och design Alex Gerdes, 2016

Static vs Dynamic binding Polymorfism. Objekt-orienterad programmering och design Alex Gerdes, 2016 Static vs Dynamic binding Polymorfism Objekt-orienterad programmering och design Alex Gerdes, 2016 Diagnostiskt prov Shape + overlaps(shape): int return 1; Shape shape = new Shape(); Polygon tripoly =

Läs mer

TAIU07 Matematiska beräkningar med Matlab

TAIU07 Matematiska beräkningar med Matlab TAIU07 Matematiska beräkningar med Matlab Laboration 3. Linjär algebra Namn: Personnummer: Epost: Namn: Personnummer: Epost: Godkänd den: Sign: Retur: 1 Introduktion 2 En Komet Kometer rör sig enligt ellipsformade

Läs mer

TENTAMEN I PROGRAMMERING. På tentamen ges graderade betyg:. 3:a 24 poäng, 4:a 36 poäng och 5:a 48 poäng

TENTAMEN I PROGRAMMERING. På tentamen ges graderade betyg:. 3:a 24 poäng, 4:a 36 poäng och 5:a 48 poäng TENTAMEN I PROGRAMMERING Ansvarig: Jan Skansholm, tel 7721012 Betygsgränser: Hjälpmedel: Sammanlagt maximalt 60 poäng. På tentamen ges graderade betyg:. 3:a 24 poäng, 4:a 36 poäng och 5:a 48 poäng Skansholm,

Läs mer

Föreläsning 5: Introduktion av pekare

Föreläsning 5: Introduktion av pekare Föreläsning 5: Introduktion av pekare Det bör påpekas att det som tas upp i introduktionen inte är reella exempel på kod. Man anväder inte pekare till att peka på enstaka heltal som i exemplen nedan, men

Läs mer

Det här dokumentet är till för att ge en översikt över ASP.NET MVC samt hur WCF Services används från.net applikationer.

Det här dokumentet är till för att ge en översikt över ASP.NET MVC samt hur WCF Services används från.net applikationer. Informationsinfrastruktur 7.5 hp Mattias Nordlindh Inledning Det här dokumentet är till för att ge en översikt över ASP.NET MVC samt hur WCF Services används från.net applikationer. Dokumentet består av

Läs mer

CW RefLevel - Användarbeskrivning

CW RefLevel - Användarbeskrivning C/W CadWare CW RefLevel - Användarbeskrivning OBS: Listan under CadWare kan variera mellan olika system. Modul i exemplet här kan saknas i vissa system. Allmänt Rationell hantering av modellfiler i ett

Läs mer

Tentamen i TDP004 Objektorienterad Programmering Praktisk del

Tentamen i TDP004 Objektorienterad Programmering Praktisk del Tentamen i TDP004 Objektorienterad Programmering Praktisk del Datum: 2011-08-22 Tid: 14-18 Plats: SU-salar i B-huset. Jour: Per-Magnus Olsson, tel 281456 Jourhavande kommer att besöka skrivsalarna ungefär

Läs mer

Räkna med ASP.NET MVC 3

Räkna med ASP.NET MVC 3 Instruktion Räkna med ASP.NET MVC 3 Introduktionsuppgift Författare: Mats Loock Kurs: ASP.NET MVC Kurskod:1DV409 Innehåll Du ska följa steg-för-steg -instruktionen i denna introduktionsuppgift och skapa

Läs mer

Procedurell renderingsmotor i Javascript och HTML5

Procedurell renderingsmotor i Javascript och HTML5 Procedurell renderingsmotor i Javascript och HTML5 TNM084 Procedurella Metoder för bilder Gustav Strömberg - gusst250@student.liu.se http://gustavstromberg.se/sandbox/html5/shademe/texture_stop_final.html

Läs mer

Arv och polymorfism i Java

Arv och polymorfism i Java 1 (5) Arv och polymorfism i Java Objektorienterad programmering 5 Syfte Att ge en introduktion till arvsmekanismen i Java. Mål Efter övningen skall du kunna definiera klasser med arv i Java. förstå hur

Läs mer

Inlämningsuppgift : Finn. 2D1418 Språkteknologi. Christoffer Sabel E-post: csabel@kth.se 1

Inlämningsuppgift : Finn. 2D1418 Språkteknologi. Christoffer Sabel E-post: csabel@kth.se 1 Inlämningsuppgift : Finn 2D1418 Språkteknologi Christoffer Sabel E-post: csabel@kth.se 1 1. Inledning...3 2. Teori...3 2.1 Termdokumentmatrisen...3 2.2 Finn...4 3. Implementation...4 3.1 Databasen...4

Läs mer

Innehåll. Resurshantering. Resource handles. Minnesallokering. Minnesallokering Exempel: allokering på stacken. 6. Resurshantering

Innehåll. Resurshantering. Resource handles. Minnesallokering. Minnesallokering Exempel: allokering på stacken. 6. Resurshantering Innehåll EDAF30 Programmering i C++ 6. Resurshantering Sven Gestegård Robertz Datavetenskap, LTH 2017 1 Resurshantering Stack-allokering Heap-allokering: new och delete 2 Smarta pekare 3 Klasser, resurshantering

Läs mer

Objektorienterad programmering Föreläsning 2

Objektorienterad programmering Föreläsning 2 Objektorienterad programmering Föreläsning 2 Copyright Mahmud Al Hakim mahmud@webacademy.se www.webacademy.se Agenda Inläsning av data via dialogrutor Repetitioner (While-satsen och For-satsen) Nästlade

Läs mer

Objektorienterad programmering i Java I

Objektorienterad programmering i Java I Laboration 4 Objektorienterad programmering i Java I Uppgifter: 1 Beräknad tid: 6 9 timmar Att läsa: Kapitel 7, 8 (stränghantering, arrayer och Vector) Utdelat material (paket) Syfte: Att kunna använda

Läs mer

Objektorienterad programmering D2

Objektorienterad programmering D2 Objektorienterad programmering D2 Laboration nr 2. Syfte Att få förståelse för de grundläggande objektorienterade begreppen. Redovisning Källkoden för uppgifterna skall skickas in via Fire. För senaste

Läs mer

Användarhandledning Version 1.2

Användarhandledning Version 1.2 Användarhandledning Version 1.2 Innehåll Bakgrund... 2 Börja programmera i Xtat... 3 Allmänna tips... 3 Grunderna... 3 Kommentarer i språket... 4 Variabler... 4 Matematik... 5 Arrayer... 5 på skärmen...

Läs mer

Static vs Dynamic binding Polymorfism. Objekt-orienterad programmering och design (DIT953) Niklas Broberg, 2018

Static vs Dynamic binding Polymorfism. Objekt-orienterad programmering och design (DIT953) Niklas Broberg, 2018 Static vs Dynamic binding Polymorfism Objekt-orienterad programmering och design (DIT95) Niklas Broberg, 2018 Diagnostiskt prov Shape + overlaps(shape): int return 1; Shape shape = new Shape(); Polygon

Läs mer

TDIU01 - Programmering i C++, grundkurs

TDIU01 - Programmering i C++, grundkurs TDIU01 - Programmering i C++, grundkurs Pekare och Listor Eric Elfving Institutionen för datavetenskap 31 oktober 2014 Översikt 2/41 Internminne Pekare Dynamiska datastrukturer (Enkellänkade) listor Arbeta

Läs mer

Programmeringsteknik med C och Matlab

Programmeringsteknik med C och Matlab Programmeringsteknik med C och Matlab Kapitel 2: C-programmeringens grunder Henrik Björklund Umeå universitet Björklund (UmU) Programmeringsteknik 1 / 32 Mer organisatoriskt Imorgon: Datorintro i lab Logga

Läs mer

Välkommen till. Datastrukturer, algoritmer och programkonstruktion. eller DOA

Välkommen till. Datastrukturer, algoritmer och programkonstruktion. eller DOA Välkommen till Datastrukturer, algoritmer och programkonstruktion eller DOA Jag: Christer Labbassar: Caroline: Johan: Agenda, före lunch Inledning om DOA-kursen Backspegel Mål Syfte Examination Om lärande

Läs mer

Anmälningskod: Lägg uppgifterna i ordning. Skriv uppgiftsnummer (gäller B-delen) och din kod överst i högra hörnet på alla papper

Anmälningskod: Lägg uppgifterna i ordning. Skriv uppgiftsnummer (gäller B-delen) och din kod överst i högra hörnet på alla papper Tentamen Programmeringsteknik I 2018-03-16 Skrivtid: 8:00 13:00 Tänk på följande Skriv läsligt. Använd inte rödpenna. Skriv bara på framsidan av varje papper. Lägg uppgifterna i ordning. Skriv uppgiftsnummer

Läs mer

TDDC74 Lab 04 Muterbara strukturer, omgivningar

TDDC74 Lab 04 Muterbara strukturer, omgivningar TDDC74 Lab 04 Muterbara strukturer, omgivningar 1 Översikt I den här laborationen kommer ni att lära er mer om: Tillstånd, och skillnader mellan ren funktionell programmering och imperativ. Skillnaden

Läs mer

VRay för Max Camilla Ravenna / André Ravenna Alto Punto 2012 Alto Punto Askims Stationsväg 21 436 40 Askim

VRay för Max Camilla Ravenna / André Ravenna Alto Punto 2012 Alto Punto Askims Stationsväg 21 436 40 Askim VRay för Max Camilla Ravenna / André Ravenna Alto Punto 2012 Alto Punto Askims Stationsväg 21 436 40 Askim ISBN 978-91-637-2533-3 Innehåll 1: Kom igång 5 2: Nödvändiga inställningar 6 2.1: V-Ray fliken

Läs mer

Fotorealistiska bilder 1 PV360 kap 1 7: Grunder samt material och dekaler i Photoview 360

Fotorealistiska bilder 1 PV360 kap 1 7: Grunder samt material och dekaler i Photoview 360 Fotorealistiska bilder 1 PV360 kap 1 7: Grunder samt material och dekaler i Photoview 360 1 Att skapa en fotorealistisk bild kan sägas bestå av två delar: - Den artstiska delen. Att välja scen, ljussättning,

Läs mer

TDDC30 Programmering i Java, Datastrukturer och Algoritmer Lektion 3

TDDC30 Programmering i Java, Datastrukturer och Algoritmer Lektion 3 TDDC30 Programmering i Java, Datastrukturer och Algoritmer Lektion 3 Laboration 3 Visualisering (och implementering) av sortering Exempel på grafik (med Swing-paketet) Frågor 1 Laboration 3 Visualisering

Läs mer

TDIU01 - Programmering i C++, grundkurs

TDIU01 - Programmering i C++, grundkurs TDIU01 - Programmering i C++, grundkurs Sammanfattning period 1 Eric Elfving Institutionen för datavetenskap 1 oktober 2013 Översikt Ett C++-programs uppbyggnad Variabler Datatyper Satser Uttryck Funktioner

Läs mer

2D-grafik. Gustav Taxén

2D-grafik. Gustav Taxén 2D-grafik Gustav Taxén gustavt@csc.kth.se 2D164 Grafik och Interaktionsprogrammering VT 27 Framebuffer Datorminne som lagrar information för pixlarna som ska visas på skärmen Grafikkortet hämtar värdena

Läs mer

Tentamen *:58/ID100V Programmering i C Exempel 3

Tentamen *:58/ID100V Programmering i C Exempel 3 DSV Tentamen *:58/ID100V Sid 1(5) Tentamen *:58/ID100V Programmering i C Exempel 3 Denna tentamen består av fyra uppgifter som tillsammans kan de ge maximalt 22 poäng. För godkänt resultat krävs minst

Läs mer

Kapitel 6 - Undantag

Kapitel 6 - Undantag Kapitel 6 Undantag Kapitel 6 - Undantag Undantag (exceptions), returvärden throw, try och catch new, bad_alloc, nothrow Undantag och std::auto_ptr throw() i funktionsdeklaration try som funktionskropp

Läs mer

IDA kursmaterial Informationsblad make. make

IDA kursmaterial Informationsblad make. make make make är ett verktyg som främst används för att underhålla, uppdatera och återskapa program och filer. Det är dock ett generellt verktyg som kan användas även i många andra sammanhang. En avancerad

Läs mer

Hej Då, Karel! Programmering. Vårt första Javaprogram. hh.se/db2004. Java. Grundtyper, variabler och arrayer

Hej Då, Karel! Programmering. Vårt första Javaprogram. hh.se/db2004. Java. Grundtyper, variabler och arrayer Programmering hh.se/db2004 Föreläsning 3: Java. Grundtyper, variabler och arrayer Hej Då, Karel! Verónica Gaspes www2.hh.se/staff/vero www2.hh.se/staff/vero/programmering Center for Research on Embedded

Läs mer

Tentamen TEN1 HI1029 2014-05-22

Tentamen TEN1 HI1029 2014-05-22 Tentamen TEN1 HI1029 2014-05-22 Skrivtid: 8.15-13.00 Hjälpmedel: Referensblad (utdelas), papper (tomma), penna Logga in med tentamenskontot ni får av skrivvakten. Det kommer att ta tid att logga in ha

Läs mer

(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

(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 (Man brukar säga att) Java är... Denna föreläsning Allmänt om Java Javas datatyper, arrayer, referenssemantik Klasser Strängar enkelt baserat på C/C++ objekt-orienterat från början dynamiskt utbyggbart

Läs mer

Objektorienterad programmering i Java I. Uppgifter: 2 Beräknad tid: 5-8 timmar (OBS! Endast ett labbtillfälle) Att läsa: kapitel 5 6

Objektorienterad programmering i Java I. Uppgifter: 2 Beräknad tid: 5-8 timmar (OBS! Endast ett labbtillfälle) Att läsa: kapitel 5 6 Laboration 2 Objektorienterad programmering i Java I Uppgifter: 2 Beräknad tid: 5-8 timmar (OBS! Endast ett labbtillfälle) Att läsa: kapitel 5 6 Syfte: Att kunna använda sig av olika villkors- och kontrollflödeskonstruktioner

Läs mer

DD2387 Programsystemkonstruktion med C++ Tentamen 3 Onsdagen 7 januari, 14:00-18:00

DD2387 Programsystemkonstruktion med C++ Tentamen 3 Onsdagen 7 januari, 14:00-18:00 DD2387 Programsystemkonstruktion med C++ Tentamen 3 Onsdagen 7 januari, 14:00-18:00 Introduktion Skriv dina svar på separata papper, dessa scannas in efter inlämning. Du kan skriva på båda sidor. Skriv

Läs mer

Simulering med ModelSim En kort introduktion

Simulering med ModelSim En kort introduktion Linköpings universitet Institutionen för systemteknik Laborationer i digitalteknik Datorteknik 2018 Simulering med ModelSim En kort introduktion TSEA22 Digitalteknik D TSEA51 Digitalteknik Y TSEA52 Digitalteknik

Läs mer

Gissa det hemliga talet

Gissa det hemliga talet Laborationsanvisning Gissa det hemliga talet Steg 2, laborationsuppgift 1 Författare: Mats Loock Kurs: Inledande programmering med C# Kurskod:1DV402 Upphovsrätt för detta verk Detta verk är framtaget i

Läs mer

Introduktion till programmering, hösten 2011

Introduktion till programmering, hösten 2011 Föreläsning 1 Programmering är ett hantverk. Det betyder att man inte kan läsa sig till den förmågan, man måste träna och man tränar genom att skriva mer och mer avancerade program. Programmering förutsätter

Läs mer

Nyheter i Topocad 17. Mätdata. Nya beräkningsfunktioner. Mätdataprotokollet

Nyheter i Topocad 17. Mätdata. Nya beräkningsfunktioner. Mätdataprotokollet Nyheter i Topocad 17 Mätdata Nya beräkningsfunktioner Beräkningsfunktion 3D Svep Funktionen använder inmätt linje och sveper en symbol längs med linjen. På samtliga 3D-funktioner kan man nu ange Produktkod.

Läs mer

TDDC77 Objektorienterad Programmering

TDDC77 Objektorienterad Programmering TDDC77 Objektorienterad Programmering Föreläsning 5 Sahand Sadjadee IDA, Linköpings Universitet Hösttermin 2018 Outline Arrayer Metoder Räckvidd och Livslängd Arrayer Vända om inlästa värdena Vända om

Läs mer

Föreläsning 2 Objektorienterad programmering DD1332. Typomvandling

Föreläsning 2 Objektorienterad programmering DD1332. Typomvandling metoder Föreläsning 2 Objektorienterad programmering DD1332 Array [modifierare] String metodnamn (String parameter) Returtyp (utdata typ) i detta fall String Indata typ i detta fall String 1 De får man

Läs mer

F4. programmeringsteknik och Matlab

F4. programmeringsteknik och Matlab Programmeringsspråk Föreläsning 4 programmeringsteknik och Matlab 2D1312/ 2D1305 Introduktion till Java Kompilering, exekvering, variabler, styrstrukturer 1 Ett program är en eller flera instruktioner

Läs mer

Robotarm och algebra

Robotarm och algebra Tekniska Högskolan i Linköping Institutionen för Datavetenskap (IDA) Torbjörn Jonsson 2010-12-07 Robotarm och algebra I denna laboration skall du lära dig lite mer om möjlighetera att rita ut mer avancerade

Läs mer

DAT043 - Föreläsning 7

DAT043 - Föreläsning 7 DAT043 - Föreläsning 7 Model-View-Controller, mer om klasser och interface (arv, ) 2017-02-06 Designmönstret Observer avläser Observer Observable meddelar Observer avläser En eller flera objekt registrerar

Läs mer