CG C för Grafik. Fredrik Bärg Institutionen för Informationsbehandling Åbo Akademi, FIN Åbo, Finland E-post:
|
|
- Ingegerd Axelsson
- för 8 år sedan
- Visningar:
Transkript
1 CG C för Grafik Fredrik Bärg Institutionen för Informationsbehandling Åbo Akademi, FIN Åbo, Finland E-post: fbarg@abo.fi
2 Abstrakt Nvidia Corporation har nyligen släppt ett nytt språk för att förflytta vertex- och pixelprogrammering till en högre nivå. Det enda sätt som funnits om man velat programmera vertex- eller pixelshaders har varit att programmera i krånglig assemblerkod. Cg är ett språk som underlättar programmeringen av shaders. Artikeln kommer att innehålla information om språket i sig och lite beskrivningar av dess struktur. ACM Klassificering I.3.3 Picture/Image generation, I.3.4 Graphics Utilities, I.3.7 Three-Dimensional Graphics and Realism Innehållsförteckning Sid 1 Inledning 1 2 Programmerbarhet i grafikprosessorer 2 3 Shaders Vertex shaders Pixel shaders 4 4 CG C for graphics Definition Programmeringsmodell Programinput och output Programinput Varierande input till ett vertexprogram Varierande output till och från vertexprogram Varierande output från fragmentprogram Uniforma input Datatyper Standard datatyper Typkonverteringar Strukturer Räckor Uttryck och operatorer 10
3 4.5.1 Kontrollflöde Funktionsdefinitioner och funktionsöverladdning Aritmetiska funktioner från C Multipliceringsfunktionen Vektorkonstruktor Boolska operationer och jämförelseoperationer Swizzle operator Skrivmaskoperator Konditionell operator Standard biblioteksfunktioner Structs som använder bindande semantik Matematiska funktioner Geometriska funktioner Texture map funktioner Derivatafunktioner Cg run-time bibliotek 20 5 Sammanfattning 21
4 1 Inledning Vi lever i en värld där informationsteknologi har fått allt större betydelse i samhället. Med denna betydelse har det också blivit viktigt att effektivt kunna använda sig av denna teknologi och att kunna interagera med den. Flera olika sätt finns i nuläget för att göra just detta. Det vanligaste och kanske viktigaste sättet att förmedla information åt användare av informationsteknologi är genom bilder som ses på t.ex. en dataskärm. Eftersom stor vikt sätts vid just bildpresentation har också tekniken för att generera dessa bilder haft ett behov av att förbättras och utvecklas. Utvecklingen av grafikhårdvaran har gått med rask takt. Det är inte så många år sedan som man bara i sina vildaste fantasier kunde föreställa sig de bilder som grafikkort av idag lyckas framställa. Fotorealismen börjar så småningom vara verklighet, dvs. att man inte mera lyckas avgöra om en bild som man ser är dataanimerad eller ett foto taget i verkligheten. I en vanlig bordsdator finns i dagens läge grafikkort som kan åstadkomma samma saker som endast en dedikerad arbetsstation för ungefär hundratusen euro skulle ha kunnat göra för bara några år sedan. Utvecklingen har också gått mer och mer mot 3D-grafik och man ser hela tiden nya program där den tredje dimensionen utnyttjas effektivt för att bättre visualisera den information som programmet erbjuder. Den typ av program där det används överlägset mest 3d är nog ändå i speltillverkningen där utvecklingen håller ganska jämna steg med den nya grafikhårdvara som kommer ut. Det enda sättet som har funnits för att kunna dra nytta av de krafter som en GPU har att erbjuda har varit genom s.k. API:n (Application Program Interface). Det finns idag två stora API:n som i huvudsak används, DirectX som styrs av Microsoft och OpenGL, som är en öppen standard. Den snabba utvecklingen av GPU:n har också inneburit att dessa API:n inte alltid hänger med. De stora tillverkarna av GPU:n (ATI Technologies Inc. och Nvidia Corporation) kommer hela tiden fram med nya teknologier och nya effekter i sina prosessorer. Allt eftersom API:na och deras underliggande teknologier förändras, hamnar programmerare, grafiker och programvaruutgivare att adaptera till nya förhållandena. En inte alltid lätt uppgift. 1
5 Att grafikhårdvaran har blivit programmerbar har också inneburit en större utmaning för programmerare som vill förverkliga några av de effekter som GPU:na erbjuder. Tidigare har de som velat använda någon speciell effekt på GPU:n varit tvungna att skriva anrop direkt till grafikkortet via ett lågnivåspråk, en ytterst tidsödande och krävande uppgift där det är lätt att göra små fel. Med alltmer komplexa GPU:n, som har ännu mera programmerbarhet, kommer detta att bli en otroligt komplicerad uppgift. Ett högnivåspråk behövs för att effektivt kunna accessera den komplexa GPU:n. 2 Programmering av grafikprosessorer Förmågan att programmera grafikpipelinen är relativt ny. Det är först de senaste två åren som det blivit möjligt att direkt programmera olika steg i grafikkortspipelinen. Nya GPU:n (Graphics Processing Unit) har kommit ut med ungefär ett halvt års mellanrum och varje ny generation fördubblar prestandan. När det gäller mikroprosessorer så har Moores lag varit gällande ett antal år redan. Men när det gäller grafikkort och grafikprocessorer så har moores lag satts ur spel. Utvecklingstakten är så pass stor för tillfället att den motsvarar tre gånger den utvecklingstakt som moores lag säger. Denna kraft och prestanda har också möjliggjort skapandet av 3D-miljöer som på ett naturtroget sätt kan efterlikna den verkliga världen. Men för att kunna utnyttja kraften måste man kunna komma åt hårdvaran på ett så effektivt sätt som möjligt. Grafikkortspipelinen kan delas upp i tre distinkta delar. Primitivprocessering, vertexprocessering och fragmentprocessering. Det första steget i pipelinen tar speleller programspecifik data och datastrukturer och producerar flera vertex för vertexprosessorn att prosessera. Det andra skedet prosesserar alla uträkningar som har med vertex att göra och det sista skedet beslutar slutligen vad enskilda pixlar skall ha för färg.[2] 2
6 3 Shaders En shader kontrollerar hur en triangel i en 3D-scen är belyst och färgad. Detta inkluderar hur den svarar mot diffus, reflektiv, ambient samt ljusalstrande belysning. Vertex shaders ersätter det normala transformations och belysningssteget av grafikkortspipelinen, medan pixel shaders, fungerande på rasteriseringssteget, inverkar på hur den slutgiltiga skärmfärgen bestäms. Det finns stöd för shaders i DirectX 8 och senare versioner och i OpenGL genom extensioner (och som en del av den föreslagna OpenGL 2.0 standarden). 3.1 Vertex shaders De punkter som tillsammans bildar en triangel, polygon eller liknande kallas med en gemensam benämning för en vertex. En vertex shader ersätter som tidigare sagts transformations och belysningssteget i grafikkortpipelinen. Det går att dela in vertexprocesseringen i ett antal olika steg nämligen: transformationer, ljussättning och i viss mån textur-kordinat transformationer.[2] Transformationer innebär att man tar positionsdata såsom det är sparat i vertexen och transformerar det till en skärmrymdposition. Skärmrymden refererar till det tvådimensionella plan som representerar betraktarens fönster in i världen, dvs bilden som ses på en monitor är en representation av betraktarens position i spelvärlden. Vid traditionell vertexprocessering så förmedlas positionsdata från den otransformerade vertexen till den transformerade utan att göra någonting åt datat eller så förmedlar den vertexarna genom en världstransformationsmatris, följt av en vymatris och slutligen en projektionsmatris.[2] Det har blivit allt vanligare i nyare spel att använda sig av dynamisk ljussättning. Till skillnad från statisk ljussättning, som är uträknad i förväg och sparad som en textur eller ljuskarta (eng. lightmap), räknas dynamisk ljussättning ut per vertex. I framtiden kommer säkert den dynamiska ljussättningen att mer och mer göras i pixelprocesseringslagret även om vertexprosessorn fortfarande kommer att förbereda datat för pixelprocessorn.[2] 3
7 Texturtransformationer involverar att förmedla texturkordinaterna inuti vertexformatet till pixelrasteriseringsblocket. För det mesta gör detta processeringsblock inget annat än att skicka vidare texturkordinaterna. Men i det fallet att animerade texturer används så är det möjligt att göra en matristransformation på texturkordinaterna för att åstadkomma texturanimation utan att ändra på vertexarna, vilket annars skulle innebära att vertexarna skulle modifieras i videobussen och senare behöva skickas över AGP(Advanced Graphics Port)-bussen, vilket är en väldigt dyr operation i nuläget. Texturtransformationsblocket kan också användas för att räkna ut texturkordinater för sfärisk- och kubreflektionskartläggning.[2] En vertex shader tillåter en programmerare att specificera ända upp till 128 instruktioner som grafikkortet skall utföra på varje vertex. Om grafikkortet själv inte stöder vertex shaders kan de fortfarande processeras på CPU:n. Med äldre TnL (Transform & Lighting) grafikkort är det ofta möjligt att utföra enkel processering mycket snabbare genom att använda de fixerade funktioner som dessa kort har. Alltså utan att använda vertexshaders.[1] 3.2 Pixel shaders En pixel shader eller pixelrasteriserare tar den information som den får från vertexprosessorn och räknar ut en slutlig pixelfärg baserat på denna. Ett exempel av dess användning kan vara att ta en diffuserad färg och multiplicera den med texturfärgen (genom att använda texturkordinaterna för att hämta en färg från texturen). En annan metod kunde vara att addera till en färg från en reflektionstextur genom att använda sig av ett annat set med texturkordinater.[2] Pixelshaderinterfacet är mera förvillande än vertexshaderinterfacet och har många restriktioner. Den viktigaste är att pixelshaders endast kan processeras på grafikkort som stöder dem, så för äldre hårdvara måste programutvecklaren utveckla både pixelshaderteknologi och sådan teknologi som saknar pixelshaders. Detta har också inneburit att pixelshaders används mer som extra features och därför läggs inte så mycket tid på dessa. Mer tid läggs i stället på programmering av kärngrafiken.[1] 4
8 4 CG C for Graphics Nvidia Corporation introducerade den 13:e juni 2002 en specifikation för CG C for Graphics. Ett högnivåspråk med aspiration till att bli en standard för shaderprogrammering. Det är det första initiativet som tagits i denhär riktningen och de preliminära reaktionerna har varit positiva bland spel- och programutvecklare. Cg är ett funktionellt språk som inte är implementationsspecifikt när det gäller hårdvara. Det går alltså att använda sig av Cg även för GPU:n av andra fabrikat än Nvidia, vilket är en förutsättning för att språket skall ha någon chans att bli en standard. Språket är plattformsoberoende och går således att kompilera och köra på vilket operativsystem och vilken grafikhårdvara som helst (en förutsättning för detta är dock att det är någon typ av GPU som kan programmeras). Det är också relativt framtidssäkert, eftersom Cg går att anpassa till ny teknik då den kommer. Kompilern kan t.ex. optimisera för en ny GPU som kanske inte ens existerade när det ursprungliga programmet skrevs. Cg är ett HLSL (High Level Shader Language) som utvecklats med syftet att göra livet enklare för programmerare som vill använda sig av vertex- och pixelshaders. 4.1 Definition Cg är baserat på programmeringsspråket C och delar därför många karakteristika med det. Cg har samma syntax för deklarationer, funktionsanrop och de flesta datatyper som C men innehåller vissa förbättringar och ändringar som gör det enkelt att skriva program som kan kompileras om till väldigt optimiserad GPU-kod.[3] 4.2 Programmeringsmodell CPU:n har normalt endast en programmerbar prosessor. Det är då att jämföra med en GPU som har åtminstone två programmerbara prosessorer, en vertexprocessor och en fragmentprocessor, och andra icke programmerbara delar. Prosessorerna, de icke programmerbara delarna och applikationen är alla sammanlänkade genom dataflöden. Figur 1 visar Cg:s modell av GPU:n i ett dataflödesdiagram. 5
9 Figur 1 CG:s modell av GPU:n Med Cg kan man skriva program till både vertexprocessorn, så kallade vertexprogram eller vertex shaders, och fragmentprocessorn, kallade pixelprogram eller pixel shaders.[3] 4.3 Programinput och output De programmerbara prosessorerna i en GPU opererar på strömmar av data. Vertexprocessorn opererar t.ex. på en ström av vertexar och fragmentprosessorn opererar på en ström av fragment I en vanlig CPU exekveras ett program endast en gång medan det i en GPU exekveras upprepade gånger, en gång för varje dataelement i en ström. Vertexprogrammet körs en gång för varje vertex, medan fragmentprogram körs en gång för varje fragment. Cg har inbyggt stöd för denna ström-baserade programmeringsmodell.[3] Programinput Ett Cg-program kan behandla två olika typer av input, variabla och uniforma inputs. Variabla inputs används för data som är specificerad för varje element av inputdataströmmen. Till exempel är variabla inputs till ett vertexprogram de per- 6
10 vertex värden som är specificerade i vertexräckor. interpolanterna såsom texturkordinater varierande input. I ett fragmentprogram är Uniforma inputs används för värden som är specificerade separat från huvudströmmen av inputdata och som inte ändrar för varje element i strömmen. Ett vertexprogram behöver t.ex. en transformationsmatris som uniformt input. Uniforma inputs ses ofta som grafiktillstånd.[3] Varierande input till ett vertexprogram Ett vertexprogram kan vanligtvis ta emot flera olika varierande inputs. Till exempel så kan ett vertexprogram behöva få specifikationer från applikationen för följande inputs: modellens rymdposition för varje vertex, modellens rymdnormalvektor för varje vertex och texturkordinaten för varje vertex. I en programmerbar grafikpipeline finns det inga predefinierade inputs. Det är helt resonabelt för en programutvecklare att skriva ett vertexprogram som använder sig av ett per vertex refraktivt indexvärde så länge som applikationen tillhandahåller detta värde för varje vertex. Cg stöder två olika mekanismer för att specificera dessa flexibla per-vertex inputs. Första mekanismen använder sig av bindande semantik, dvs fördefinierade namn. Det är också möjligt att skippa den bindande semantiken, men då måste applikationen istället referera till varje parameter med dess namn istället för dess bindande semantik. Om bindande semantik inte används måste alla de varierande programparametrarna finnas i en enda struct som måste annoteras för att indikera att den representerar data som överförs från applikationen till vertexprogrammet.[3] Varierande output till och från vertexprogram Output:en från ett vertexprogram passerar genom en rasteriserare och görs sedan tillgänglig åt ett fragmentprogram i formen av varierande input. För att ett vertexprogram och ett fragmentprogram skall kunna operera tillsammans måste de samsas om det data som passerar mellan dem.[3] 7
11 Så som var fallet med dataflödet mellan applikationen och vertexprogrammet stöder Cg två olika mekanismer för att specificera dataflödet mellan vertex- och fragmentprogrammen. Den första mekanismen använder bindande semantik, medan den andra tillåter att bindande semantik bortlämnas.[3] Cg tillåter att det mesta av den bindande semantiken bortlämnas, men för att säkerställa att vertex- och fragmentprogrammen kan fungera tillsammans måste båda använda sig av samma struct för deras respektive output och input.[3] Varierande output från fragmentprogram Bindande semantik krävs alltid för output:en från fragmentprogram.följande bindande semantik finns tillgängliga i alla Cg fragmentprofiler: color och depth. Av bekvämlighetsskäl finns det en fragout struct fördefinierad i Cg:s standardbibliotek som alltid är tillgänglig fast man inte explicit har definierat den.[3] Uniforma input Vertex- och fragmentprogram i Cg kan också acceptera uniforma input. Ett Cg vertexprogram tar t.ex. vanligtvis en modellvy eller projektionsmatris som en av dess uniforma inputs. Ett uniformt input specificeras genom att använda uniform nyckelordet. 4.4 Datatyper Cg stöder flera olika features som skapar och manipulerar data. T.ex. standard datatyper, strukturer, räckor och typ-omändringar Standard datatyper Cg har stöd för fem olika datatyper: float, half, fixed, bool och sampler*, varav sampler finns i fem olika varianter: sampler1d, sampler2d, sampler3d, samplercube och samplerrect.[3] 8
12 Cg innehåller också inbyggda vektordatatyper som är baserade på de primära datatyperna. Exempel på några av dess är float4, float3, float2 och float1 samt bool4, bool3, bool2 och bool1.[3] Stöd finns också för matriser som är ända upp till 4x4 element. Ett exempel på hur en sådan deklaration skrivs är följande: float4x2 matrix1; vilket skapar en 4x2 matris.[3] En sak som man bör observera är att Cg inte innehåller någon int datatyp. De flesta grafikhårdvarorna stöder inte en int datatyp, därför är den heller inte inkluderad i språket. I vanliga fall går float och bool typerna att använda istället för int.[3] Typkonverteringar Typkonverteringar i Cg fungerar ungefär som de gör i C. Typkonverteringar kan explicit specifieras genom att använda C:s (newtype) typecast operator.[3] Cg utför automatiskt typbefordringar då man utför operationer med två olika typer av data. T.ex. så blir uttrycket floatvar * halfvar automatiskt kompilerat som floatvar * (float) halfvar Cg använder sig av andra regler vid automatisk typbefordring än i C endast i ett fall. En konstant utan någon explicit typsuffix orsakar inte någon typbefordring. T.ex. så blir uttrycket halfvar * 2.0 kompilerat som halfvar * (half) 2.0 [3] Som jämförelse kan nämnas att C i ovanstående fall skulle ha kompilerat det som ((double) halfvar) * 2.0. Cg använder sig av andra regler här för att minimera uträkningar som kanske är oavsiktliga men som orsakar uträkningarna att göras i en långsammare högprecisionsaritmetik.[3] 9
13 Om man vill ha tillbaka C:s uppträdande i sådana här fall så måste man skriva konstanten så att man explicit visar vilken typ den är. För detta ändamål så kan man efter konstanten lägga antingen ett f som står för float, ett h som står för half eller ett x som står för fixed. Exempelvis så blir: halfvar * 2.0f kompilerat som ((float) halfvar) * 2.0f.[3] Strukturer Cg stöder strukturer på samma sätt som C. Cg använder sig av C++ konventionen som implicit kör en typedef baserat på namnet när en struktur är deklarerad. struct mystruct {... }; mystruct s; // Definierar s som mystruct [3] Räckor Det finns stöd för räckor i Cg och de deklareras precis som i C. Eftersom Cg inte stöder användandet av pekare måste räckor alltid definieras användande räck-syntax istället för pekar-syntax.[3] 4.5 Uttryck och operatorer Cg stöder uttryck och operatorer för att åstadkomma något av följande: - kontrollflöde - funktionsdefinitioner och funktionsöverladdningar - aritmetiska operatorer från C - multipliceringsfunktionen - vektorkonstruktion - boolska operatorer och jämförelseoperatorer - swizzle operator - skrivmaskoperator - konditionell operator [3] 10
14 4.5.1 Kontrollflöde Cg använder sig av följande C kontrollkonstruktorer: - funktionsanrop och return uttrycket - if/else - while - for Dessa kontrollkonstruktorer kräver att deras konditionella uttryck är av typen bool. Eftersom Cg-uttryck såsom i <= 3 är av typen bool, märks denna ändring från C inte så bra. Funktionsrekursion är förbjuden i Cg.[3] Funktionsdefinitioner och funktionsöverladdning Cg överför modifierbara funktionsparametrar per värde eller resultat istället per referens eftersom vertex- och fragmenthårdvaran på GPU:n inte stöder användandet av pekare. Cg stöder funktionsöverladdning per antalet operander och per operandtyp. Valet av en funktion sker genom att matcha varje operand för sig, börjande från den första operanden.[3] Aritmetiska operatorer från C Cg inkluderar alla standard aritmetikoperatorer från C och låter dem användas på såväl vektorer som skalärer. Vektoroperationerna sker alltid per element. T.ex. float3 (a,b,c) * float3 (A,B,C) blir float3 (a*a,b*b,c*c) Operationerna kan också göras i en blandad skalär-/vektorform, dvs. a * float3 (A,B,C) blir float3 (a*a,b*b,c*c).[3] 11
15 4.5.4 Multipliceringsfunktionen Cg:s mul() funktion används för att multiplicera matriser med vektorer och för att multiplicera matriser med matriser.[3] Vektorkonstruktor Cg tillåter vektorer som är ända upp till storlek 4, att bli konstruerade genom följande notation. Vektorkonstruktorn kan vara var som helst i uttrycket: y = x * float4 (3.0, 2.0, 1.0, -1.0);[3] Boolska operatorer och jämförelseoperatorer Cg inkluderar tre standard boolska operatorer från C: - && - -! I C tar dessa operatorer in och ut int-värden men i Cg tar de in och producerar boolvärden. Cg stöder också C:s jämförelseoperatorer som producerar värden av typen bool: - < - <= -!= - == - >= - > Till skillnad från C tillåter Cg alla boolska operatorer att operera på vektorer i vilket fall den boolska operationen utförs per element.[3] 12
16 4.5.7 Swizzle operator Cg har en så kallad swizzle-operator,., som låter komponenterna av en vektor byta plats för att åstadkomma en ny vektor. Den nya vektorn behöver inte vara av samma storlek som den ursprungliga, element kan upprepas eller lämnas bort fullständigt. Bokstäverna x, y, z, och w representerar den första, andra, tredje och fjärde komponenten av orginalvektorn. Bokstäverna r, g, b, och a kan användas för samma ändamål. Eftersom swizzle-operatorn är effektivt implementerad i hårdvaran är den oftast gratis att använda. Ett exempel på dess användning: float3 (a,b,c).zyx blir float3 (c,b,a) Swizzle operatorn kan också användas för att skapa en vektor av en skalär: a.xxxx blir float4 (a,a,a,a)[3] Skrivmaskoperator När den är placerad på vänstra sidan om en uppgift, är. operatorn använd för skrivmaskning. Den kan användas för att selektivt skriva över komponenterna i en vektor. Det är förbjudet att specificera en särskild komponent fler än en gång i en skrivmask.[3] Konditionell operator I Cg finns inkluderat C:s if/else funktionalitet, likaså? : konstruktet. Med? : konstruktet så kan kontrollvariabeln vara en boolsk vektor. I detta fall så måste den andra och tredje operanden vara likaledes stora vektorer och urval sker på elementbasis. Cg förbjuder den andra och tredje operanden från att producera sidoeffekter. Specifikt så kan inte den andra och tredje operanden vara uttryck som kallar på en funktion med en out parameter.[3] 13
17 4.6 Standard biblioteksfunktioner CG tillhandahåller ett antal inbyggda funktioner och fördefinierade strukturer med bindande semantik för att förenkla GPU-programmering. Dessa funktioner är liknande till standard biblioteksfunktioner i C på så sätt att de ger ett bekvämt set med vanliga funktioner. I de flesta fall kartläggs funktionerna till en enkel inbyggd GPUinstruktion vilket betyder att de utförs väldigt snabbt. Specifika funktioner kan ändras om det av prestanda eller kvalitetsskäl är nödvändigt, men oftast så är det bättre att använda sig av standardbiblioteket eftersom dess funktioner är optimiserade för framtida GPU:n. Detta betyder att en shader som skrivs idag inte är föråldrad då nyare arkitekturer av hårdvara kommer i framtiden. En fördel med standardbiblioteket är också att det tillhandahåller ett bekvämt ihopsatt interface för vertex- och fragmentprogram.[3] Structs som använder bindande semantik Flera structer som använder bindande semantik är fördefinierade i standardbiblioteket beroende på vilken profil som används.det finns tre färdigdefinierade structer, av20, vf20 och fragout. Av20 structen kopplar ihop en applikation med ett vertexprogram och innehåller den konventionella listan över parametrar som förs över från applikationer till vertexprogram. Vf20 är en vertex till fragment kopplande struct. Det som den gör är att den definierar ett standardset av parametrar som förs över från vertexprocessering till fragmentprocessering Den tredje structen med bindande semantik som definieras i standarbiblioteket är fragment till skärmbuffert kopplande och kallas fragout.[3] 14
18 4.6.2 Matematiska funktioner Cg har stöd för en mängd matematiska funktioner inom trigonometri, exponering, avrundning och vektor- och matrismanipulationer bland annat. Alla funktioner fungerar på skalärer och vektorer av alla möjliga storlekar förutom i vissa enskilda fall där specialregler finns. Följande tabell visar vilka funktioner som är möjliga med Cg.[3] Tabell 1 Cg:s matematiska funktioner (C) Nvidia Corporation 15
19 16
20 17
21 4.6.3 Geometriska funktioner Cg stöder ett mindre antal geometriska funktioner i standardbiblioteket vilka kan ses i tabell 2. Tabell 2 Cg:s geometriska funktioner (C) Nvidia Corporation Texture map funktioner Tabell 3 visar de texturfunktioner som tillhandahålls av Cg:s standardbibliotek. För tillfället stöds dessa funktioner endast av Nvidia:s fp30-profil (denna profil innehåller de funktioner som Nvidia:s nya grafikkort, som kommer ut i februari 2003, stöder), 18
22 men dessa funktioner kommer också att stödas av alla framtida profiler som har texturekartläggningsfunktionalitet. I tabellen så kan istället för t stå f, h eller x för att indikera returneringstypen float, half eller fixed. På samma vis så står n istället för 1, 2, 3 eller 4 för att indikera en returneringstyp som är en skalär, två vektorer, tre vektorer eller fyra vektorer. Tabell 3 Cg:s texture map funktioner (C) Nvidia Corporation 19
23 4.6.5 Derivata-funktioner Tabell 4 visar de derivatafunktioner som Cg stöder i sitt standardbibliotek. Dessa funktioner stöds endast i fp30 profilen. Tabell 4 Cg:s derivatafunktioner (C) Nvidia Corporation 4.7 Cg run-time biblioteket Cg kompilern kan användas på två olika sätt, antingen för off-line kompilering eller för run-time kompilering. Off-line kompilering innebär att Cg kompilern används av applikationsutvecklaren som ett command-line verktyg under applikationsutvecklingen för att kompilera Cg- 20
24 kod så att den omvandlas till GPU assemblerspråk. Applikationen är ansvarig för att använda denna assemblerkod på samma vis som den skulle vara ansvarig för att använda ett handskrivet vertex- eller fragmentprogram. Run-time kompilering innebär att Cg-kompilern anropas av applikationen vid körtid, genom en run-time API. Run-time API:n levererar ytterligare egenskaper bortom kompileringen. Det viktigaste är att den låter applikationen manipulera inputs till ett Cg-program genom att använda samma parameternamn som uppkommer i prototypen av Cg-programmet. Utan denna förmåga, måste input:en till ett GPU-program manipuleras med hjälp av hårdvaruregistren. Run-time API:n är det enklaste sättet att använda Cg i en applikation Egenskaper levererade av run-time API:n Cg run-time:n levererar alla de egenskaper som finns tillgängliga åt en applikation. På grund av skillnaderna mellan OpenGL och Direct3D är några av dessa egenskaper implementerade genom att använda olika rutiner för OpenGL och Direct3D versionerna av run-time:n. En [*] indikerar sådana egenskaper i listan här nere. - Kompilera ett Cg-program levererat via en string eller en fil. - Sända den kompilergenererade assemblerkoden till den underliggande API.n (OpenGL eller Direct3D). [*] - Binda till ett Cg-program i förberedelse för renderingen (alltså välja tidigare kompilerade Cg vertex- och fragmentprogram för att rendera en hop med geometri). [*] - Göra en förfrågan för att få reda på listan över uniforma och varierande (per vertex) parametrar som behövs av ett program. - Göra en förfrågan om typen av en särskild parameter. - Sätta värdet av en uniform parameter till ett program. [*] - Göra ändringar i en av texturdelarna/samplers som används av ett program. [*] - Specificera en vertex-räcka som kan användas för varierande parametrar till ett program. [*] - Göra en förfrågan om vilket hårdvaruregister en viss parameter använder. 21
25 5 Sammanfattning Nvidias satsning på Cg kan ses som ett steg i rätt riktning. Ingen programmerare vill hålla på och skriva jobbig assemblerkod när det finns alternativ som är lättare. Cg har lyckats i det hänseendet att det har gjort vertex- och pixelshaderprogrammering mera överskådlig. Likheten till C gör att kodningen känns mera familjär för programmerare som vill lära sig språket. Det blir således lättare för nya programmera att greppa tag i språket och börja använda sig av shaders i sina program. Det finns fortfarande många frågetecken vad gäller accepterandet av Cg som standard. Det som kan förorsaka lite försiktighet är att endast Nvidia själv har rättigheterna att ändra på specifikationerna till språket. Detta ger Nvidia en något ojust fördel eftersom de skulle kunna ändra specifikationerna på Cg när de vill för att bättre kunna matcha det med sin nya hårdvara, således skulle det alltid vara deras egna grafikkort som skulle vara bäst lämpade. Just nu för tillfället så är Cg det bästa (och enda) programmerinsspråket för att skriva vertex och pixelshaders, men hur kommer situationen att se ut om ett år? DirectX 9.0 kommer att ha ett inbyggt HLSL och ingen vet ännu hur enkelt eller svårt det är att använda. Om man ser åt andra hållet så kommer även OpenGL i sin 2.0-version att innehålla möjlighet att programmera vertex- och pixelshaders. Det är tiden som får utvisa om Nvidias satsning bär frukt. Personligen tror jag att Nvidia kan få det lite svårt att nå sitt mål att göra Cg till en standard. Allt hänger väl egentligen på om Nvidia kan tänka sig att lägga in stöd för funktioner som endast deras konkurrenter har. Om de skulle utveckla språket på det viset så tror jag faktiskt att deras drömmar om att få det till en standard kan gå i uppfyllelse. Men eftersom Nvidia är ett kommersiellt företag som måste gå på vinst så kan det bra vara så att de inte vill slå benen under sig och stöda sådana funktioner i Cg som skulle kunna gynna konkurrenterna. 22
26 Referenser [1] HLSL's, Cg and the RenderMonkey (Tom s Hardware Guide) [www] hämtat [2] Vertex shaders and pixel shaders (Tom s Hardware Guide) [www] hämtat [3] CG Toolkit User s Manual (Nvidia Corporation) [www] hämtat
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
Grafiska pipelinens funktion
LUNDS TEKNISKA HÖGSKOLA CAMPUS HELSINGBORG Grafiska pipelinens funktion Ludvig von Sydow EDT62, HT17 Datorarkitekturer med Operativsystem Sammanfattning Denna rapport syftar till att beskriva hur en graphics
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
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
LUNDS UNIVERSITET. Parallell exekvering av Float32 och INT32 operationer
LUNDS UNIVERSITET Parallell exekvering av Float32 och INT32 operationer Samuel Molin Kursansvarig: Erik Larsson Datum 2018-12-05 Referat Grafikkort utför många liknande instruktioner parallellt då typiska
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
Föreläsning 2. Operativsystem och programmering
Föreläsning 2 Operativsystem och programmering Behov av operativsystem En dator så som beskriven i förra föreläsningen är nästan oanvändbar. Processorn kan bara ges enkla instruktioner såsom hämta data
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
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
Arv: Fordonsexempel. Arv. Arv: fordonsexempel (forts) Arv: Ett exempel. En klassdefinition class A extends B {... }
En klassdefinition class A extends B {... Arv definierar en klass A som ärver av B. Klassen A ärver alla fält och metoder som är definierade för B. A är en subklass till B. B är en superklass till A. class
Operatoröverlagring. endast operatorsymboler definierade i C++ kan överlagras = += -= *= /= %= ^= &= = <<= >>= < > <= >= ==!= && > ->*, [ ] ( )
TDDC76 PoD OH Föreläsning C++ 83 Operatoröverlagring endast operatorsymboler definierade i C++ kan överlagras + - * / % ^ & ~! > = += -= *= /= %= ^= &= = = < > = ==!= && ++ -- -> ->*, [ ]
Datatyper och kontrollstrukturer. Skansholm: Kapitel 2) De åtta primitiva typerna. Typ Innehåll Defaultvärde Storlek
De åtta primitiva typerna Java, datatyper, kontrollstrukturer Skansholm: Kapitel 2) Uppsala Universitet 11 mars 2005 Typ Innehåll Defaultvärde Storlek boolean true, false false 1 bit char Tecken \u000
Klassdeklaration. Metoddeklaration. Parameteröverföring
Syntax: Class Declaration Modifier Class Body Basic Class Member Klassdeklaration class Class Member Field Declaration Constructor Declaration Method Declaration Identifier Class Associations Motsvarar
Mälardalens högskola Västerås, Maj 2006 Institutionen för Datavetenskap och Elektronik, IDE Student: Alexander Andersson E-post:
Mälardalens högskola Västerås, Maj 2006 Institutionen för Datavetenskap och Elektronik, IDE Student: Alexander Andersson E-post: aan02016@student.mdh.se, aan02016@hotmail.com Telefon: 0707-418478 Handledare:
Objektorienterad programmering Föreläsning 4
Objektorienterad programmering Föreläsning 4 Copyright Mahmud Al Hakim mahmud@dynamicos.se www.webbacademy.se Agenda Introduktion till objektorientering Klasser och Objekt Instansvariabler Metoder Introduktion
Parameteröverföring. Exempel. Exempel. Metodkropp
Exempel atriangle.changesize (100, 50); // OK atriangle.changesize (100); // fel antal atriangle.changesize ( 1, 50); // fel datatyp char c = atriangle.getarea (); // fel datatyp Parameteröverföring I
MATLAB. Python. Det finns flera andra program som liknar MATLAB. Sage, Octave, Maple och...
Allt du behöver veta om MATLAB: Industristandard för numeriska beräkningar och simulationer. Används som ett steg i utvecklingen (rapid prototyping) Har ett syntax Ett teleskopord för «matrix laboratory»
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
Programmera i C Varför programmera i C när det finns språk som Simula och Pascal??
Programmera i C Varför programmera i C när det finns språk som Simula och Pascal?? C är ett språk på relativt låg nivå vilket gör det möjligt att konstruera effektiva kompilatorer, samt att komma nära
Objektorienterad Programmering (TDDC77)
Objektorienterad Programmering (TDDC77) Föreläsning II: utmatning, variabler, typer Ahmed Rezine IDA, Linköpings Universitet Hösttermin 2016 Kompilera och köra programmet under terminal 2: I Skapa Hej.java
Classes och Interfaces, Objects och References, Initialization
Classes och Interfaces, Objects och References, Initialization Objekt-orienterad programmering och design (DIT953) Niklas Broberg/Johannes Åman Pohjola, 2018 Abstract class En abstract class är en class
I Skapa Hej.java och skriv programmet. I Kompilera med javac Hej.java. I Rätta fel och repetera tills du lyckas kompilera ditt program
Kompilera och köra programmet Objektorienterad Programmering (TDDC77) Föreläsning II: utmatning, variabler, typer Ahmed Rezine IDA, Linköpings Universitet Hösttermin 2016 under terminal 2: I Skapa Hej.java
Classes och Interfaces, Objects och References Objekt-orienterad programmering och design (DIT952) Niklas Broberg, 2016
Classes och Interfaces, Objects och References Objekt-orienterad programmering och design (DIT952) Niklas Broberg, 2016 Abstract class En abstract class är en class som inte kan skapa några objekt. Syfte:
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
Parallellism i NVIDIAs Fermi GPU
Parallellism i NVIDIAs Fermi GPU Thien Lai Phu IDA2 Abstract This report investigates what kind of computer architecture, based on Flynn s taxonomy, is used on NVIDIAs Fermi-based GPU to achieve parallellism
Procedurell 3D-eld på grafikkortet
Procedurell 3D-eld på grafikkortet TNM084 Procedurella metoder för bilder Anders Hedblom, andhe893@student.liu.se 2012-04-04 1. Bakgrund 1.1. Procedurella metoder Procedurella metoder har ett stort användningsområde
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
F5: Högnivåprogrammering
F5: Högnivåprogrammering Parameteröverföring Koppling mellan låg- och högnivåprogrammering Lokala variabler Heapen Datatyper 1 Subrutin, parameteröverföring: 1(3) Via register genom värde Skicka data via
F5: Högnivåprogrammering
1 F5: Högnivåprogrammering Parameteröverföring Koppling mellan låg- och högnivåprogrammering Lokala variabler Heapen Datatyper 1 Subrutin, parameteröverföring: 1(3) Via register genom värde Skicka data
Laboration - Shaders
DH2640/2D2323/DOA, VT 2009 2009-03-06 Laboration - Shaders Martin Fitger, d00-mfi@d.kth.se Version 1.4 Syfte Att erbjuda studenterna möjlighet att få lära sig om olika shaderkoncept och renderingsalgoritmer
Dagens föreläsning. Repetition. Repetition - Programmering i C. Repetition - Vad C består av. Repetition Ett första C-program
Dagens föreläsning Programmeringsteknik för Ingenjörer VT05 Föreläsning 3-4 Repetition Datatyper Uttryck Operatorer Satser Algoritmer Programmeringsteknik VT05 2 Repetition Repetition - Programmering i
Idag. Javas datatyper, arrayer, referenssemantik. Arv, polymorfi, typregler, typkonvertering. Tänker inte säga nåt om det som är likadant som i C.
Idag Javas datatyper, arrayer, referenssemantik Klasser Arv, polymorfi, typregler, typkonvertering Strängar Tänker inte säga nåt om det som är likadant som i C. Objectorienterad programmering Sida 1 Ett
Idag. statiska metoder och variabler. private/public/protected. final, abstrakta klasser, gränssnitt, delegering. wrapper classes
Idag statiska metoder och variabler private/public/protected final, abstrakta klasser, gränssnitt, delegering wrapper classes ett lite större exempel Objectorienterad programmering Sida 1 Vad vi vet om
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.
Designing a Shading System. David Larsson
Designing a Shading System David Larsson Överblick Genomgång av rendering och shading Designval Implementationsdetaljer Rendering Omvandla en konceptuell 3d-värld till en bild Geometri Kamera Något saknas?
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 (
International Olympiad in Informatics 2011 22 29 July 2011, Pattaya City, Thailand Tävlingsuppgifter Dag 2 Svenska 1.3. Papegojor
Papegojor Yanee är fågelentusiast. Sedan hon läst om IP over Avian Carriers (IPoAC), har hon spenderat mycket tid med att träna en flock papegojor att leverera meddelanden över långa avstånd. Yanees dröm
Inledning. Kapitel 1. 1.1 Bakgrund. 1.2 Syfte
Sammanfattning Vi har i kursen Modelleringsprojekt TNM085 valt att simulera ett geléobjekt i form av en kub. Denna består av masspunkter som är sammankopplade med tre olika typer av fjädrar med olika parametrar.
(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
Lambdas. (och fler design patterns) Objekt-orienterad programmering och design (DIT952) Niklas Broberg, 2017
Lambdas (och fler design patterns) Objekt-orienterad programmering och design (DIT952) Niklas Broberg, 2017 Funktioner En funktion (i programmeringstermer) är en operation som tar ett eller flera argument,
32 Bitar Blir 64 Sammanfattning
32 Bitar Blir 64 Sammanfattning Syftet med rapporten är att ge en insyn i det tillvägagångssätt och problem som uppstod i utvecklingen från 32 bitars CPUs till 64 bitars CPUs samt inblick i skillnaden
A comparison study between OpenGL 4.3, OpenGL ES 3.0 and WebGL 1.0 With focus on rendering pipeline and texture handling
Sammanfattning OpenGL är ett standardiserat API som används för att hantera 3D-grafik på desktop-datorer. Även då OpenGL är oberoende av specialanpassad hårdvara så passar det inte till alla sorter av
TDDC77 Objektorienterad Programmering
TDDC77 Objektorienterad Programmering Föreläsning 3 Sahand Sadjadee IDA, Linköpings Universitet Hösttermin 2018 Outline Operatorer Java Standard Library Inmatning Operatorer operatorer En operator är en
När man vill definiera en matris i MATLAB kan man skriva på flera olika sätt.
"!$#"%'&)(*,&.-0/ 177 Syftet med denna övning är att ge en introduktion till hur man arbetar med programsystemet MATLAB så att du kan använda det i andra kurser. Det blir således inga matematiska djupdykningar,
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
Föreläsning 1: Intro till kursen och programmering
Föreläsning 1: Intro till kursen och programmering Kursens hemsida http:www.it.uu.se/edu/course/homepage/prog1/vt11 Studentportalen http://www.studentportalen.uu.se Lärare: Tom Smedsaas, Tom.Smedsaas@it.uu.se
Vem är vem på kursen. Objektorienterad programvaruutveckling GU (DIT011) Kursbok Cay Horstmann: Big Java 3rd edition.
Institutionen för Datavetenskap Göteborgs universitet HT2009 DIT011 Vem är vem på kursen Objektorienterad programvaruutveckling GU (DIT011) Kursansvarig : Katarina Blom, tel 772 10 60 Rum: 6126 (E-huset)
Arrayer. results
Arrayer 85 Arrayer Deklarerar utrymme för många variabler i en enda deklaration Array (fält) Varje värde har ett numeriskt index i Java indexeras en array med N element med indexen till N-1 Exempel: 1
Python. Python är, som Scheme, ett interpreterat språk men det finns kompilatorer för Python.
är, som Scheme, ett interpreterat språk men det finns kompilatorer för. När man interpreterar ett språk tillhandahåller man en interpretator som läser sats för sats och försöker tolka den. När man kompilerar
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
Föreläsning 2 Programmeringsteknik och C DD1316. Mikael Djurfeldt
Föreläsning 2 Programmeringsteknik och C DD1316 Mikael Djurfeldt Föreläsning 2 Programmeringsteknik och C Python introduktion Utskrift Inläsning Variabler Datatyp Aritmetiska operatorer Omvandling
Innehåll. Pekaren this Självreferens. Klasser Resurshantering, representation. Överlagring av operatorer. Överlagring av operatorer
Innehåll EDAF30 Programmering i C++ 8. Klasser; resurshantering och polymorfism Sven Gestegård Robertz Datavetenskap, LTH 2016 1 Klasser 2 Operatorer 3 Klasser, resurshantering Rule of three Move semantics
Python. Python är, som Scheme, ett interpreterat språk men det finns kompilatorer för Python.
är, som Scheme, ett interpreterat språk men det finns kompilatorer för. När man interpreterar ett språk tillhandahåller man en interpretator som läser sats för sats och försöker tolka den. När man kompilerar
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
Objektorienterade programmeringsspråk. Objektorienterade språk. Den objekt-orienterade modellen. Jämför med icke-oo
Objektorienterade språk Historik Simula 67 Smalltalk 80 Procedurorienterad programmering Subprogram Programbibliotek Dataorienterad programmering Abstrakta datatyper Objektbaserade språk, föregångare till
Övning2. Variabler. Data typer
Vahid 28 okt 2002 prgk02 Övning2 -Repetition -Variabler -Primitiva typer (+ boolean) -Operatörer +, ++, --, -Typ konvertering -Wrapper klasser -Jämförelse operatörer,(==, =, ,!=,!) -String hur man
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
Per Holm Lågnivåprogrammering 2014/15 24 / 177. int och double = = 2, 147, 483, 647
Lågnivåprogrammering Föreläsning 2 Lågnivåprogrammering Förberedelse inför laboration 2. Maskinspråk, assemblerspråk Talrepresentation En enkel dator, komponenter Instruktionsformat, instruktionscykel
Föreläsning 1: Intro till kursen och programmering
Föreläsning 1: Intro till kursen och programmering λ Kursens hemsida http:www.it.uu.se/edu/course/homepage/prog1/mafykht11/ λ Studentportalen http://www.studentportalen.uu.se UNIX-konton (systemansvariga
Metoder (funktioner) Murach s: kap Winstrand Development
(funktioner) Murach s: kap 6 2013-01-23 1 Winstrand Development Metoder I C# kan vi dela in koden i block en kodsekvens ska köras likadant på flera ställen i applikationen. Detta block kallas för en metod
Programmering = modellering
Programmering = modellering Ett datorprogram är en modell av en verklig eller tänkt värld. Ofta är det komplexa system som skall modelleras I objektorienterad programmering består denna värld av ett antal
GRUNDER I VHDL. Innehåll. Komponentmodell Kodmodell Entity Architecture Identifierare och objekt Operationer för jämförelse
GRUNDER I VHDL Innehåll Komponentmodell Kodmodell Entity Architecture Identifierare och objekt Operationer för jämförelse KOMPONENTMODELL Modell för att beskriva komponenter Externt interface Intern funktion
Föreläsning 10 Datalogi 1 DA2001. Utskrift på skärmen. Syntax. print( Hej ) Hur är det? Hej. print( Hej,end= ) print( Hur är det? ) HejHur är det?
Föreläsning 10 Datalogi 1 DA2001 python introduktion Variabler Datatyp Aritmetiska operatorer av typer Reserverade ord logiska operatorer If-sats kommentarer på skärmen print( Hej ) print( Hur är det?
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
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 =
Introduktion till programmering och Python Grundkurs i programmering med Python
Introduktion till programmering och Python Hösten 2009 Dagens lektion Vad är programmering? Vad är en dator? Filer Att tala med datorer En första titt på Python 2 Vad är programmering? 3 VAD ÄR PROGRAMMERING?
Planering Programmering grundkurs HI1024 HT 2014
Planering Programmering grundkurs HI1024 HT 2014 Föreläsning V36 Föreläsning 1 Vad är programmering? Boken! Kurs-PM Vad är ett program? Kompilerande- Interpreterande Programmeringsmiljö Hello World! Att
Språket Python - Del 1 Grundkurs i programmering med Python
Hösten 2009 Dagens lektion Ett programmeringsspråks byggstenar Några inbyggda datatyper Styra instruktionsflödet Modulen sys 2 Ett programmeringsspråks byggstenar 3 ETT PROGRAMMERINGSSPRÅKS BYGGSTENAR
Universe Engine Rapport
1 Universe Engine Rapport Alexander Mennborg 2017-05-08 2 Inledning I denna rapport diskuteras utvecklingsprocessen till projektet Universe Engine. Denna diskussion omfattar hela utveckling från starten
PROGRAMMERING. Ämnets syfte. Kurser i ämnet
PROGRAMMERING Ämnet programmering behandlar programmeringens roll i informationstekniska sammanhang som datorsimulering, animerad grafik, praktisk datoriserad problemlösning och användaranpassad konfiguration
Arrayer (vektorer) Murach s: kap Elektronikcentrum i Svängsta AB
Arrayer (vektorer) Murach s: kap 8 2013-01-15 1 Elektronikcentrum i Svängsta AB Arrayer Arrayer (vektorer) Ofta i ett program har vi flera variabler av samma datatyp som är relaterade till varandra. Exempel
HI1024 Programmering, grundkurs TEN2 2014-03-13
HI1024 Programmering, grundkurs TEN2 2014-03-13 KTH STH Haninge 13.15-18.00 Tillåtna hjälpmedel: En A4 handskriven på ena sidan med egna anteckningar Kursboken C PROGRAMMING A Modern Approach K. N. King
Lunds Tekniska Högskola Datorarkitektur med operativsystem EITF60. Superscalar vs VLIW. Cornelia Kloth IDA2. Inlämningsdatum:
Lunds Tekniska Högskola Datorarkitektur med operativsystem EITF60 Superscalar vs VLIW Cornelia Kloth IDA2 Inlämningsdatum: 2018-12-05 Abstract Rapporten handlar om två tekniker inom multiple issue processorer
Styrteknik: MELSEC FX och numeriska värden
PLC2C:1 MELSEC FX I kursen styrteknik används styrsystemet FX1S som är ett litet system i MELSEC FX-serien. Vår version av FX1S har endast digitala in- och utgångar men oftast finns det både digitala och
Tillämpad Programmering (ID1218) :00-13:00
ID1218 Johan Montelius Tillämpad Programmering (ID1218) 2014-03-13 09:00-13:00 Förnamn: Efternamn: Regler Du får inte ha något materiel med dig förutom skrivmateriel. Mobiler etc, skall lämnas till tentamensvakten.
Laboration 1: Figurer i hierarki
Laboration 1: Figurer i hierarki Bakgrund Två grundläggande tekniker i objektorienterad konstruktion är arv och komposition. Mål Laborationen har flera avsikter: 1. Ge kunskaper i hur program kan organiseras
Procedurell grottgenerator och eld i GLSL. Marcus Widegren
Procedurell grottgenerator och eld i GLSL Marcus Widegren 14 januari 2012 Innehåll 2 Sammanfattning Jag har gjort en enkel procedurell grottgenerator i GLSL och C++. För belysning används en fackla, som
Programmering A. Johan Eliasson johane@cs.umu.se
Programmering A Johan Eliasson johane@cs.umu.se 1 Jag Undervisar mest grundläggande programmering på Institutionen för datavetensakap Applikationsutveckling för iphone Applikationsutveckling i Java Datastrukturer
TDIU01 - Programmering i C++, grundkurs
TDIU01 - Programmering i C++, grundkurs Grundläggande satser och uttryck Eric Elfving Institutionen för datavetenskap 5 augusti 2014 Översikt Uttryck Litteraler Operatorer Satser Villkor Upprepning Teckenhantering
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
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
Grunderna i C++ T A. Skapad av Matz Johansson BergströmLIMY
Grunderna i C++ ARK 385: Virtuella Verktyg i en Materiell värld AT Arkitektur & Teknik Chalmers Tekniska Högskola 2009 - Kursen skapades (3 förel.) 2010-6 förel. + 2 projekt 2011-8 förel. Helt omarbetade
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å
Innehålls förteckning
Programmering Uppsats i skrivteknik Axxell Företagsekonomi i informationsteknik 19.3.2015 Respondent: Tomas Björklöf Opponent: Theo Wahlström Handledare: Katarina Wikström Innehålls förteckning 1. Inledning...3
TDIU01 - Programmering i C++, grundkurs
TDIU01 - Programmering i C++, grundkurs Underprogram - Funktioner Eric Elfving Institutionen för datavetenskap 18 september 2014 Översikt 2/22 Återblick till satsblocken Funktioner - Namngivna satsblock
Föreläsning 2 Programmeringsteknik och C DD1316. Programmering. Programspråk
Föreläsning 2 steknik och C DD1316 python introduktion Variabler Datatyp Aritmetiska operatorer av typer Reserverade ord logiska operatorer If-sats kommentarer betyder att instruera en dator Ett program
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
Introduktion C-programmering
Introduktion C-programmering Viktor Kämpe C Historik Utvecklades först 1969 1973 av Dennis Ritchcie vid AT&T Bell Labs. Högnivå språk med kontakt mot maskinvara. Ett utav de mest använda språken. 2 C Standarder
Datorarkitekturer med operativsystem ERIK LARSSON
Datorarkitekturer med operativsystem ERIK LARSSON Semantic gap Alltmer avancerade programmeringsspråk tas fram för att göra programvaruutveckling mer kraftfull Dessa programmeringsspråk (Ada, C++, Java)
Föreläsning 8 - del 2: Objektorienterad programmering - avancerat
Föreläsning 8 - del 2: Objektorienterad programmering - avancerat Johan Falkenjack johan.falkenjack@liu.se Linköpings universitet Sweden December 4, 2013 1 Innehåll Arv och andra viktiga begrepp Abstrakta
Övningsuppgifter kapitel 8
Inst. för Systemteknik Introduktion till programmering (SMD 180), 5 p Övningsuppgifter kapitel 8 1. Listor är en viktig datatyp i Python. Hur definierar kursboken lista? Vad kallas de värden som tillsammans
Programmering i C++ EDA623 Mer om klasser. EDA623 (Föreläsning 6) HT 2013 1 / 26
Programmering i C++ EDA623 Mer om klasser EDA623 (Föreläsning 6) HT 2013 1 / 26 Mer om klasser Innehåll Konstanta objekt Statiska medlemmar Pekaren this Vänner (friends) Överlagring av operatorer EDA623
Design av interaktiv multimedia. Läs i förväg om det som övningarna kommer att beröra. Träna hemma både före och efter övningarna.
Använd olika lager. Döp lagren! Organisera era bibliotek! Design av interaktiv multimedia Ge era symboler instansnamn för att hitta dem med AS. Nytt för denna kurs: Ingen ActionScript-kod i.fla-filen!
Introduktion till programmering SMD180. Föreläsning 4: Villkor och rekursion
Introduktion till programmering Föreläsning 4: Villkor och rekursion 1 1 Några inbyggda funktioner (med resultat!) Konverterar mellan de grundläggande typerna: >>> int("32") 32 >>> int(3.999) 3 >>> float(32)
Datastrukturer och algoritmer
Innehåll Datastrukturer och algoritmer Föreläsning 2 Fält Specifikation, Konstruktion och Specifikation, Konstruktion Dynamiska resurser Länk Länkade celler 25 26 Fält Modell Schackbräde Organisation n-dimensionellt
Teknik bakom tredimensionella datorgrafiken Direct3D
Teknik bakom tredimensionella datorgrafiken Direct3D Samuli Ketola Examensarbete Medieteknik 2011 Förnamn Efternamn EXAMENSARBETE Arcada Utbildningsprogram: Medieteknik Identifikationsnummer: 3234 Författare:
Uppgift 1 - programmet, Uppg6.m, visade jag på föreläsning 1. Luftmotståndet på ett objekt som färdas genom luft ges av formeln
Matlab-föreläsning (4), 10 september, 015 Innehåll m-filer (script) - fortsättning från föreläsning 1 In- och utmatning Sekvenser, vektorer och matriser Upprepning med for-slingor (inledning) Matlab-script
HAND TRACKING MED DJUPKAMERA
HAND TRACKING MED DJUPKAMERA ETT PROJEKT I TNM090 - SOFTWARE ENGINEERING Rasmus KARLSSON Per JOHANSSON Erik HAMMARLUND raska293@student.liu.se perjo020@student.liu.se eriha891@student.liu.se 2014-01-14
Föreläsning 2 Programmeringsteknik DD1310. Programmering. Programspråk
Föreläsning 2 steknik DD1310 python introduktion Variabler Datatyp Aritmetiska operatorer av typer Reserverade ord logiska operatorer If-sats kommentarer funktioner betyder att instruera en dator Ett program
Föreläsning 2 Programmeringsteknik DD1310. Programmering. Programspråk
Föreläsning 2 steknik DD1310 Python introduktion Variabler Datatyper Aritmetiska operatorer av typer Reserverade ord logiska operatorer If-sats kommentarer betyder att instruera en dator Ett program är