OpenGL. grafikbibliotek? Nackdelar med OpenGL. Fördelar med OpenGL. En introduktion till OpenGL. OpenGL. rdvara. Grafikhårdvara.

Relevanta dokument
En introduktion till OpenGL. Gustav Taxén

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

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

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

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

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

In- och utenheter. Händelsebaserad programmering i GLUT. Interrupt-baserad interaktion. Sampling / polling. Händelsebaserad interaktion (forts.

OpenGL AGI HT05. Gustav Taxén

Shaders. Gustav Taxén

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

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

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

RTG-formatet Gustav Taxén,

Transformationer i 3D. Gustav Taxén

OpenGL, Maya och specialeffekter

OpenGL, Maya och specialeffekter

Rastrering och displayalgoritmer. Gustav Taxén

Grafiska pipelinen. Edvin Fischer

OpenGL, Maya och specialeffekter

Introduktion till OpenGL

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

Grafiska pipelinens funktion

Procedurell renderingsmotor i Javascript och HTML5

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

Grafiska användargränssnitt i Java

Procedurell grottgenerator och eld i GLSL. Marcus Widegren

F5: Högnivåprogrammering

F5: Högnivåprogrammering

Information Coding / Computer Graphics, ISY, LiTH

Laboration - Shaders

Procedurell 3D-eld på grafikkortet

2D-grafik. Gustav Taxén

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

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

Information Coding / Computer Graphics, ISY, LiTH. Compute shaders!! Framtiden för GPU computing eller sen efterapning av Direct Compute?

Grafik i DrRacket AV TOMMY KARLSSON

Grafiska användargränssnitt i Java

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

Den tekniska utvecklingen av hårdvara och mjukvara för realtidsgrafik

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

Lab5 för prgmedcl04 Grafik

Mälardalens högskola Västerås, Maj 2006 Institutionen för Datavetenskap och Elektronik, IDE Student: Alexander Andersson E-post:

Realtidsskuggalgoritmer för virtuella 3D-världar på modern grafikhårdvara M A R C U S B E A U S A N G

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

Simulering av rök på GPU

OH-BILDER DATORGRAFIK HT 2005

Metoder för att öka realismen vid animerade 3Dförlopp. Master of Science Thesis MARTIN REBAS

ADS : STACK ADT: STACK. Stack och Kö -Implementering - Tilllämpningar. Oftast förekommande metoder i Stack. TopOfStack

Utmatningstekniker Vektoriserade (linjeritande) skärmar

A comparison study between OpenGL 4.3, OpenGL ES 3.0 and WebGL 1.0 With focus on rendering pipeline and texture handling

Realtidsalgoritmer för ljusets spridning och absorption mot partiklar i luften P E T E R L Ö N N Q U I S T

Grafiska användargränssnitt i Java

Laboration 3 HI1024, Programmering, grundkurs, 8.0 hp

Procedurella Grottor TNM084. Sammanfattning. Alexander Steen

Kurvor och ytor. Gustav Taxén

SgLib Simple Graphics Library

TNM022 Proceduella Bilder Rendering av proceduell päls i realtid

Varför behövs det? I Allegro finns t.ex. stöd för:

Procedurell Terräng med LOD i OpenGL 4

Föreläsning 2. Operativsystem och programmering

TDDC74 Programmering: Abstraktion och modellering Tenta, kl 14 18, 11 juni 2014

Bemästra verktyget TriBall

Koordinatsystem och Navigation

Skärmtangentbordet som är enkelt att använda både med mus, touchskärmar och interaktiva whiteboards

Datastrukturer och algoritmer. Föreläsning 4 Test, Stack och Kö

TDDD78, TDDE30, 729A Grafik: Att "rita" egna komponenter

Övning från förra gången: readword

För att komma igång. Ta skissen från designlabben eller motsvarande och lägg in den i front/side/top fönstret/fönstrena.

Repetition + lite av varje. Ulf Assarsson Department of Computer Engineering Chalmers University of Technology

Byggnet 3D-viewer LATHUND

Föreläsning 3: Abstrakta datastrukturer, kö, stack, lista

Innehållsförteckning

Android översikt. TDDD80 Mobila och sociala applikationer

3.5 Visuell programmering

DAT043 - föreläsning 8

Teknik för avancerade datorspel!

Texturering - förstoring 2(2)

Bemästra verktyget TriBall

Skinning and Animation

Datastrukturer och algoritmer

Grafik raytracing. Mattias Axblom.

Tentamen i TDP004 Objektorienterad Programmering Praktisk del

Dynamic Review for Models ProjectWise Navigator

Abstrakta datastrukturer

TDDC30 Programmering i Java, Datastrukturer och Algoritmer Lektion 3

Datorspelsgrafik. Gustav Taxén

Programutveckling med Java Development Kit. (JDK 1.1.x) och Programmers File Editor (PFE 7.02)

Här är ett väldigt bra tidpunkt att spara scenen. Jag har valt att bygga ett litet pyramidtorn.

Fönsterbeteende. Mike McBride Jost Schenck Översättare: Stefan Asserhäll

Grunderna i C++ T A. Skapad av Matz Johansson BergströmLIMY

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

Grunderna i C++ T A. Skapad av Matz Johansson BergströmLIMY

Universe Engine Rapport

Designing a Shading System. David Larsson

TDDC30 Programmering i Java, Datastrukturer och Algoritmer Lektion 3

Fö 7: Operativsystem. Vad är ett operativsystem? Målsättning med operativsystem. Styr operativsystemet datorn?

Information Coding / Computer Graphics, ISY, LiTH CUDA. En lösning för generella beräkningar. En introduktion: Programmingsmodell och språk

Starta ett fönster... Hur håller tkinter reda på musklick? Olika sätt att organisera fönsterinnehåll. Och för att placera våra widgets

Teknik för avancerade datorspel!

6. Nu skall vi ställa in vad som skall hända när man klickar på knappen samt att markören skall ändra sig till en hand när markören är på knappen.

Transkript:

En introduktion till Gustav Taxén gustavt@nada.kth.se Står för Open Graphics Library. C-bibliotek för 3D-grafik (och( i viss mån 2D). Utvecklat av Silicon Graphics (SGI). Kontrolleras av ett Architectural Review Board med c:a 0 företagsmedlemmar. Licens måste köpas för utveckling av implementation. Gratis att använda nda. Mesa: GNU-implementation som har SGIs godkännande nnande. 2D323/NA8740 Datorgrafik med Interaktion VT 2006 Varför behövs grafikbibliotek? Grafikhårdvara rdvara Skillnader i funktionalitet och möjligheter. Skillnader i styrning. Plattformar Skillnader i operativsystem. Applikationer Målet är att koden skall vara densamma oberoende av hårdvara och plattform. Specifikationen är oberoende av fönster- och operativsystem. Windows, MacOS,, Linux, Solaris, Specifikationen definierar vad funktionerna i ska göra,, men inte hur de implementeras. Systemberoende del sköter datautbyte mellan och operativsystem. Enbart rendering: inget stöd för inenheter, fönsterhantering,, etc. Fördelar med Portabelt. Kraftfullt. (Relativt) enkelt att använda nda. Anpassat för 3D-grafikh grafikhårdvara rdvara men kan även användas ndas för att rita 2D. Effektivt. Utbyggbart via s.k. extensions. Används nds i akademiska världen. Används nds i industrin, bl.a.. i PlayStation 3. Nackdelar med -kod kan ge många funktionsanrop. "Aktivt onintresse" från Microsoft, som föredrar sitt eget Direct 3D. Buggiga drivrutiner för en del grafikkort jämfört med Direct 3D. Specifikationen uppdateras långsamt, vilket ger massor av extensions.

-komponenter Renderingsfunktionalitet. GLU ( Utility Library) Hjälpfunktioner för bl.a. transformationer. GLX / GLw Sköter datautbyte mellan operativsystemet och. GLUT Portabelt bibliotek tredjepartsbibliotek som gömmer systemberoende delar + fönsterhantering + inenheter. GLUT Skrivet av Mark Kilgard, då SGI, nu nvidia. Mål: att exakt samma -kod ska kunna kompileras på alla plattformar! Funktioner: Starta. Öppna fönster (eller fullskärm rm). Hantera mus, tangentbord,, joystick, m.m. Timer. Rita boxar, sfärer rer, tekannor, m.m. GLUT Applikation GLUT Interaktionstoolkit Eventhanterare och Operativsystem Hårdvara och grafiktoolkit Händelsebaserad interaktion Operativsystem eller ramsystem tar hand om förändringar f i status hos enheter. För r varje statusförändring genereras en event som innehåller information om förändringen. Programmet prenumererar påp events genom att tillhandahålla lla en callback. Händelsebaserad interaktion Callback-funktionen anropas vid särskilda s tillfällen. llen. Programmet sägs s dåd fånga en event. Mellan rapporteringarna lagras events i en kö. Applikationen kan generera events vid behov genom att anropa särskilda s funktioner (t.ex. forcera omritning av fönster). Inenhet Kö Dispatcher Interrupt-subrutin Callback-lista lista Callback (i applikationen) 2

Minimalt GLUT-program #include <GL/glut.h> void display(void) { /* Rita om fönster med */ Dubbelbuffring och djupbuffert (mer senare) int main(int argc, char *argv[]) { glutinit(&argc, argv); glutinitdisplaymode(glut_double GLUT_DEPTH); glutcreatewindow( My window ); glutdisplayfunc(display); glutmainloop(); return 0; Registrera callback för r omritning Events i GLUT Events kan indelas i tre typer: Fönster Menyer Globala Några GLUT-events för fönster Redisplay (måste fångas f av alla fönster) f Reshape Keypress Mouse button Passsive mouse movement Active mouse movement Entry void display(void) { void reshape(int width, int height) { int main(int argc, char *argv[]) { glutcreatewindow( My Window ); glutdisplayfunc(display); glutreshapefunc(reshape); Menyer i GLUT Hierarkiska pop-up up-menyer. För r varje fönster f gäller g att en meny kan kopplas till varje musknapp. Varje meny äger en lista med menyrubriker och en meny-callback callback. Varje meny har en identitet (ett heltal). Varje menyrubrik som inte är r en undermeny har en identitet (ett heltal). Meny Arrange Icons By Refresh Meny 2 Name Size Type ID ID 3 9 Callback Callback Meny-callback Meny-callback 2 3

void menucallback(int itemid) { if (itemid == ) { /* Refresh */ void menucallback2(int itemid) { if (itemid == ) { /* Name */ if (itemid == 3) { /* Size */ if (itemid == 9) { /* Type */ int main(int argc, char *argv[]) { int id; id = glutcreatemenu(menucallback2); glutaddmenuentry( Name, ); glutaddmenuentry( Size, 3); glutaddmenuentry( Type, 9); glutcreatemenu(menucallback); glutaddsubmenu( Arrange Icons By, id); glutaddmenuentry( Refresh, ); glutattachmenu(glut_left_button); Animation Rita om fönstret regelbundet GLUT har en "idle"- event (global) som anropas då inget annat händer Forcera en omritning i en idle-callback: void idle(void) { glutpostredisplay(); int main() { glutidlefunc(idle); Animation och dubbelbuffring Översikt över TV-signal Hörn void display(void) { /* rensa fönstret */ /* rita med */ glutswapbuffers(); Synlig Gömd Volym Kontrast Bildformat Normal Färg Transformationsmatris Projektionsmatris Synlig Gömd Bild och ljud Fragment Översikt över Översikt över GLUT Geometri Operationer på hörn Meddelande: Behov av omritning Fragment Rastrering Operationer på fragment Applikation Bilddata Operationer på bildelement Framebuffer: (bildbuffert x 2) Hjälpbuffertar för vissa tester, mer senare) Textur- minne Geometri- specifikation Modelview- matris Textur- parametrar Avbild- ning Projektions- matris Ljussättning Ljussättnings ttnings- parametrar Trans- formation Operationer på fragment Inställningar förf tester 4

Geometrispecifikation Transformationer Y Transformation glbegin(gl_triangles); glvertex3f(.0, 0.0, 0.0); glvertex3f(0.0,.0, 0.0); glvertex3f(0.0, 0.0,.0); glend(); Z (0,0,) (0,,0) (,0,0) X Transformation Projektion Viewport- transformation Transformationer Modelview-matrisen Objektkoord. x o y o z o w o Matrisstack x w y w z w Fönsterkoord. Ögonkoord. x e y e z e w e Perspektiv- division Viewport- transformation Matrisstack x n y n z n Normerade enhetskoord. Klippkoord. x c y c z c w c Modelview- matris Projektions- matris Objektkoordinater anges med glvertex. Modelview-matrisen M omvandlar till ögonkoordinater: : v e = M v o. M positionerar modeller (objekt) i världen. v Normaler transformeras också (mer senare). Ljussättning görs g i ögonkoordinater (mer senare). Projektionsmatrisen Projektionsmatrisen P omvandlar ögonkoordinater till klippkoordinater: v c = P v e. P projicerar hörnen h påp ett bildplan och definierar samtidigt en vy-volym volym.. Alla primitiver klipps mot denna volym. Kameran sitter i (0, 0, 0) och ser i riktningen (0, 0, -). Perspektivdivision och viewporttransformation Perspektivdivision: (x n, y n, z n ) = (x( c / w c, y c / w c, z c / w c ). Perspektivdivisionen ger normerade enhetskoordinater i intervallet [-,[ ]. Viewport-transformation transformation: : skalning och offset i bildbufferten, ger fönsterkoordinater. Skalning och offset är i 2D, så z w = z n. 5

void display(void) { glclearcolor(0., 0.2, 0.3,.0); glclear(gl_color_buffer_bit); glmatrixmode(gl_modelview); glloadidentity(); gltranslatef(0.0, 0.0, -3.0); glmatrixmode(gl_modelview); glloadidentity(); gltranslatef(0.0, 0.0, -3.0); (0,,-3) glcolor3f(.0,.0,.0); glbegin(gl_triangles); glvertex3f(.0, 0.0, 0.0); glvertex3f(0.0,.0, 0.0); glvertex3f(0.0, 0.0,.0); glend(); glutswapbuffers(); Y (0,,0) (0,0,) Z (0,0,-2) (,0,0) X (,0,-3) Transformation är ekvivalent med byte av koordinatsystem glloadidentity(); gltranslatef(0,0,-3); glrotatef(50,0,,0); gltranslatef(0,0,3); glbegin(gl_triangles); glvertex3f(,0,0); glvertex3f(0,,0); glvertex3f(0,0,); glend(); glpushmatrix pushar aktuellt koordinatsystem på stacken. glpopmatrix ersätter aktuellt koordinatsystem med det som finns överst på stacken. Demo void reshape(int width, int height) { glmatrixmode(gl_projection); glloadidentity(); gluperspective(45, (GLfloat) width / (GLfloat) height, 0.5, 0.0); glviewport(0, 0, width, height); int main(int argc, char *argv[]) { glutcreatewindow( My Window"); glutdisplayfunc(display); glutreshapefunc(reshape); 6

Perspektivprojektion Ortogonalprojektion gluperspective(angle, aspect, near, far); z x y near Bildplan far angle glortho(left, right, bottom, top, near, far); z x y Bildplan right, bottom near far left, top Viewport-transformation transformation glviewport(ox, oy, sx, sy); Objektkoord. glmatrixmode(), glpushmatrix(), glpopmatrix() glloadidentity(), glmultmatrix(), glloadmatrix() gltranslate(), glrotate(), glscale() glfrustum(), gluperspective(), glortho(), gluortho2d() Ögonkoord. Klippkoord. sy x o y o z o w o x e y e z e w e Modelview- matris Projektions- matris x c y c z c w c (ox, oy) sx x w y w z w Perspektiv- division Viewport- transformation x n y n z n Position och storlek för viewport:en anges i fönsterkoordinater. Fönsterkoord. glviewport() Normerade enhetskoord. Hierarkiska modeller Består-av av-hierarki Pivotpunkt Skelett Arm Överarm Underarm 7

Lokala koordinatsystem Från hierarki till kod Subnodens origo positioneras m.a.p. förälderns koordinatsystem. Skelett Arm void drawskeleton(void) { drawarm(); void drawarm(void) { drawupperarm(); drawlowerarm(); Överarm Underarm void drawupperarm(void) { void drawlowerarm(void) { Från hierarki till kod Från hierarki till kod void drawskeleton(void) { glpushmatrix(); positionera armens origo; drawarm(); glpopmatrix(); void drawarm(void) { glpushmatrix(); positionera överarmens origo; drawupperarm(); glpopmatrix(); glpushmatrix(); positionera underarmens origo; drawlowerarm(); glpopmatrix(); Ändra rotation här! void drawskeleton(void) { glpushmatrix (); positionera armens origo; drawarm (); glpopmatrix (); Från hierarki till kod glmatrixmode(gl_modelview); glloadidentity(); glpushmatrix(); gltranslatef(modellens position); rita torso; Animation Uppdateringsmekanism glpushmatrix(); gltranslatef(pivotpunkt för överarmen); glrotatef(grader, rotationsaxel); rita överarmen; glpushmatrix(); gltranslatef(pivotpunkt för underarmen); glrotatef(grader, rotationsaxel); rita underarmen; glpopmatrix(); glpopmatrix(); Parametrar Rendering/ utritning Transformationer baserade på parametrarna glpopmatrix(); 8

Demo - forward kinematics Ljussättning Phongs ljusmodell N Ambient + N Diffuse param 0 = f 0 (t) param = f (t) Kända + Specular R N Ljuskälla Ambient RGBA Diffuse RGBA Specular RGBA Ambient RGBA Hörnets material Diffuse RGBA Specular RGBA, shininess + Hörn RGBA Demo Hörnets normal i förhållande till ljuskällan llan Reflektions- riktning i förhållande till kameran (origo) http://www.xmission.com/~nate/opengl.html Goraud shading Bra att komma ihåg om ljussättning Färg beräknas i varje hörn och interpoleras sedan linjärt över polygonen. Normaler anges före varje hörn med glnormal3f(nx, ny, nz). Då ljussättning är aktivt har aktuell färg ingen effekt. stöder (minst)) 8 aktiva ljuskällor llor. En ljuskälla lla avger en viss mängd av varje ljustyp. Då ljuskällans llans position anges multipliceras den med aktuell modelviewmatris. 9

Back face culling Back face culling 90 o > 90 o Kamera glenable(gl_cull_face); Fram- eller baksida? Definieras av hörnens h ordning sett från n kameran. Konventionen är r att motsols är r riktat mot kameran. Rastrering "Översätter" från hörn till pixelpunkter. Ett fragment består av Position: (X, Y, Z) i normerade enhetskoordinater Färg: (R, G, B, A) Texturkoordinater: (s, t, q, r) Texturer Texturer har ingen filformatstolk för bilder. För labben finns libjpeg förberett.. Se informationen i kursbunten! Eller hämta ett gratisbibliotek från webben. Ett bra C++-alternativ är Corona (http://corona.sourceforge.net corona.sourceforge.net/). Eller skriv en egen tolk! 0

Texturkoordinater Demo Texturkoordinat t s gltexcoord2f(s, t); Anges före glvertex (precis som för normaler). http://www.xmission.com/~nate/opengl.html MIP-mapping MIP-mapping Teknik för att undvika aliasing-problem. Filtrera ett antal texturer i förväg och lagra dem effektivt. Vid texturering väljs automatiskt den textur som passar bäst m.a.p. avstånd från kameran (om MIP-mapping är aktiverat). Många grafikkort har andra former av antialiasing också. Texturering i Förstoring och förminskning Filtreringsalternativ. Clamp/wrap-around around för texturkoord. Bilddata (texels). Texturapplicerings- parametrar Texturobjekt Ett texturobjekt åt gången är aktivt. Rastrering Texelstorlek = pixelstorlek (inträffar i princip aldrig) Textur Förstoring Pixelpunkter på skärmen Förminskning Textur Pixelpunkter på skärmen Texturkoordinater

Filtreringsalternativ Clamp / wrap around Textur Pixelpunkter på skärmen Textur Pixelpunkter på skärmen (s, t) = (.25, -2.75) t gltexparameteri(gl_texture_2d, GL_TEXTURE_MIN_FILTER, GL_NEAREST); gltexparameteri(gl_texture_2d, GL_TEXTURE_MIN_FILTER, GL_LINEAR); GL_REPEAT GL_CLAMP Labbtips: GL_NEAREST_MIPMAP_LINEAR är default, men vi använder nder inte MIP-maps maps Glöm m inte att sätta s parametrar för f r förstoring f också! s gltexparameteri(gl_texture_2d, GL_TEXTURE_WRAP_S, GL_REPEAT); Bilddata: Texels Bilddata: Bildplan och datatyper m format R G B R G B R G B A R G B A R R R R origo n (width, height) = (2 n, 2 m ) där m, n är heltal 0 type GL_UNSIGNED_BYTE GL_FLOAT Specifikation av bilddata Texturappliceringsparametrar glteximage2d(gl_texture_2d, level, internalformat, width, height, 0, format, type, GLvoid *texels); MIP-map-nivå (= 0) Sätt till samma som type Vilka bildplan som ingår Datatyp på texels Namn på array med texels gltexenvi(gl_texture_env, GL_TEXTURE_ENV_MODE, mode); där mode är GL_DECAL = Ersätt RGB med texturdata, spara A. GL_REPLACE = Ersätt RGBA med texturdata. GL_MODULATE = Multiplicera texturdata med ljussättning/f ttning/färg. Lagras inte i texturobjekt! 2

Operationer på fragment Huvudsakligen ett antal tester som avgör om fragmentet ska skickas till bildbufferten eller inte. Testerna genomförs alltid i samma ordning. Ordningen är definierad i - specifikationen. Används nds för borttagning av skymda ytor, dynamiska skuggor, specialeffekter, m.m. Djuptest Fragment Djupbuffert Bildbuffert Fönster Vanlig bugg på labben: du glömde tala om för GLUT att du ville ha en djupbuffert! Djuptest (Z-buffring).2 0.9 0.95. 0.97 0.8.23 > 0.97 < 0.8 <.23.2 0.9 0.95. 0.97 0.8.23 Testa om anländande ndande fragment har större eller mindre djupvärde än det som redan finns i bufferten. Om värdet är mindre, ersätt med det nya fragmentet. Shaders s pipeline är statisk: operationer på hörn och operationer på fragment genomförs på ett på förhand bestämt sätt. nvidia's GeForce 3 gav möjlighet att ersätta de två stegen med program (i assembler), s.k. programmerbar pipeline. Programmen kallas för vertex programs och fragment programs i (vertex( shaders och pixel shaders i Direct 3D). Shaders Olika korttillverkare har lite olika funktioner i sin assembler. Men nu finns högnivåspråk som kompilerar till sådan assembler! nvidia cg,, Microsoft HLSL,, Shader Language, m.fl. Shaders har inneburit en ny paradigm inom realtidsgrafiken! Shaders T Normal (N) Kamera (V) T = transmission_vector(n,v); (s,t) = to_env_map_tex_coord(t); color = tex_lookup(s,t); 3

Shaders Vi tittar närmare på transmissionvektorer och environment mapping på bildsyntesföreläsningen! Mer om shaders på hårdvaruföreläsningen! Mer info Woo, Neider,, Davis: The Programming Guide,, Addison Wesley Developer Press. Upplagan för f. finns som PDF: http://www.opengl.org www.opengl.org/documentation/ red_book_.0/ Segal, Akeley: The Graphics System: A Specification. Finns påp http://www.opengl.org Plus en mängd m andra böcker b Se också länkarna påp kurshemsidan! Mer info Gå till http://www.opengl.org www.opengl.org/ 4