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

Relevanta dokument
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

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

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

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

En introduktion till OpenGL. Gustav Taxén

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

RTG-formatet Gustav Taxén,

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

OpenGL, Maya och specialeffekter

OpenGL, Maya och specialeffekter

Transformationer i 3D. Gustav Taxén

Rastrering och displayalgoritmer. Gustav Taxén

OpenGL, Maya och specialeffekter

Grafiska pipelinen. Edvin Fischer

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

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

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

Texturering - förstoring 2(2)

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

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

2D-grafik. Gustav Taxén

Kurvor och ytor. Gustav Taxén

Laboration - Shaders

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

TDDC74 Programmering: Abstraktion och modellering Tentamen, lördag 27 augusti 2016, kl 8 12

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

Procedurell grottgenerator och eld i GLSL. Marcus Widegren

Information Coding / Computer Graphics, ISY, LiTH. Bump mapping!

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

Introduktion till OpenGL

Enkla datatyper minne

F5: Högnivåprogrammering

Transformationer, Angel

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

F5: Högnivåprogrammering

Teknik för avancerade datorspel!

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

Procedurell renderingsmotor i Javascript och HTML5

Teknik för avancerade datorspel!

TDIU01 - Programmering i C++, grundkurs

2 FRÅN VÄRLD TILL SKÄRM

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

Att prova på en enkel Applet och att lära sig olika sätt att hämta data från tangentbordet. Du får även prova på att skapa din första riktiga klass.

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

Institutionen för matematik och datavetenskap Karlstads universitet. GeoGebra. ett digitalt verktyg för framtidens matematikundervisning

Realism och hypermediering

Skinning and Animation

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

TENTAMEN PROGRAMMERING I JAVA, 5P SOMMARUNIVERSITETET

Realism och hypermediering

Programmering av grafisk display

TDIU01 - Programmering i C++, grundkurs

Designing a Shading System. David Larsson

Grafik raytracing. Mattias Axblom.

Information Coding / Computer Graphics, ISY, LiTH

Programmering av grafisk display

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

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

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

Undersökande arbetssätt i matematik 1 och 2

Objektorienterad Programmering (TDDC77)

Grafik i DrRacket AV TOMMY KARLSSON

Datatyper och kontrollstrukturer. Skansholm: Kapitel 2) De åtta primitiva typerna. Typ Innehåll Defaultvärde Storlek

Procedurell 3D-eld på grafikkortet

Pekare och arrayer. Indexering och avreferering

Översikt. Bildsyntesens huvudmålsättning. Ljusmodeller. Simulerat ljusspektra till datorskärm? Ljusspektra. En introduktion till bildsyntes

SNABBGUIDE för Windows Media Encoder (media kodaren) - Sänd live med din webbkamera

Demonstration och konsultation Arbetsbokens avsnitt 5 och 6 LCD Grafisk display Introduktion till laboration 3

Programmera i C Varför programmera i C när det finns språk som Simula och Pascal??

Modellering. Gustav Taxén

Redovisas per e-post till senast fredag 16 februari kl Följande ska finnas med i redovisningen:

Dagens föreläsning. Diverse Common Lisp. Konstanter, parametrar, globala variabler

Grafiska pipelinens funktion

Program Rubrik Beskrivning Åtgärd Datum Version

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

Översikt. Bildsyntesens huvudmålsättning. Ljusmodeller. Simulerat ljusspektra till datorskärm? Ljusspektra. En introduktion till bildsyntes

UPG5 och UPG8 Miniprojekt 1: 2D datorgrafik

Parameteröverföring. Exempel. Exempel. Metodkropp

Föreläsning 2 Objektorienterad programmering DD1332. Typomvandling

Bézierkurvor och parametriska objektrepresentationer

Dagens föreläsning. Repetition. Repetition - Programmering i C. Repetition - Vad C består av. Repetition Ett första C-program

Modeller. Modeller, animering och fraktaler. Lokala koordinatsystem. Abstraktion. Hierarkiska koordinatsystem. Består-av -hierarki

Tips och tricks 1 Cadcorp SIS

Simulering av rök på GPU

Programmering i C++ EDA623 Typer. EDA623 (Föreläsning 4) HT / 33

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

Spelutveckling - Scenegrafer. Scenegrafer Optimeringar Culling

TNM022 Proceduella Bilder Rendering av proceduell päls i realtid

Optisk bänk En Virtuell Applet Laboration

3.0. Tips och Trix Sida 1 av 18

Objektorienterad Programmering (TDDC77)

Att använda pekare i. C-kod

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

Geometry shaders! och Tesselation shaders!

SgLib Simple Graphics Library

Programmering A. Johan Eliasson

Transkript:

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 Rastrering Texturminne Operationer på fragment Framebuffert (bildbuffert + hjälpbuffertar) Viktigt att komma ihåg: OpenGL-kommandon Ex: ändra aktuell färg glcolor3f(.0,.0,.0); OpenGL är en tillståndsmaskin. Antal argument b byte s short i int f float d double ub unsigned byte us unsigned short ui unsigned int v vector (c array) R G B Argumentens datatyp Alla kombinationer är inte relevanta för alla kommandon! Geometrispecifikation Transformationer glbegin(gl_triangles); glvertex3f(.0, 0.0, 0.0); glvertex3f(0.0,.0, 0.0); glvertex3f(0.0, 0.0,.0); glend(); Alla hörn anges i homogena koordinater. Om w saknas sätts den till. Om z saknas sätts den till 0. Det är tillåtet (och önskvärt) att ange fler primitiver i rad. Data för hörn MÅSTE anges INNAN hörnets position. Transformation Transformation Projektion Viewporttransformation

Transformationer i OpenGL Objektkoord. x o y o z o w o x w y w z w Fönsterkoord. Matrisstack v e = M v o n = (M - ) T n Ögonkoord. x e y e z e w e (x w, y w, z w ) = (sx n + o, sy n + o, sz n + o) Matrisstack x n y n z n v c = P v e Normerade enhetskoord. Klippkoord. x c y c z c w c (Klippning) Exempel (0,0,) z glmatrixmode(gl_modelview); glloadidentity(); gltranslatef(0.0, 0.0, -3.0); y (0,,0) (0,0,-2) (,0,0) x (0,,-3) (,0,-3) Exempel Transformation 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(); Viktigt att komma ihåg: glpushmatrix pushar aktuellt koordinatsystem på stacken. glpopmatrix ersätter aktuellt koordinatsystem med det som finns överst på stacken. Animation och hierarkier Animation Modelviewmatris Projektionsmatris Perspektivdivision (x n, y n, z n ) = (x c / w c, y c / w c, z c / w c ) Viewporttransformation Uppdateringsmekanism Parametrar Rendering/ utritning OpenGL 2

Hierarkiska modeller Består-av-hierarki pivotpunkt Skelett Arm Överarm Underarm Lokala koordinatsystem Från hierarki till kod, steg 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, steg 2 void drawskeleton(void) { glpushmatrix(); positionera armens origo; drawarm(); glpopmatrix(); void drawarm(void) { glpushmatrix(); positionera överarmens origo; drawupperarm(); glpopmatrix(); glpushmatrix(); positionera underarmens origo; drawlowerarm(); glpopmatrix(); Transformation av delträd Ändra rotation här! void drawskeleton(void) { glpushmatrix (); positionera armens origo; drawarm (); glpopmatrix (); 3

Demo Animationstekniker param 0 = f 0 (t) param = f (t) Kända Animationstekniker Animationstekniker Keyframing Inverse Kinematics (param 0, param, ) = F(x, y, z) Definieras implicit Kända Ljussättning: Phongs reflektionsmodell Ambient Matt Phongmodellen i OpenGL Color = Ambient + + [ MatDiffuse LightDiffuse i (N L i ) + i + MatSpecular LightSpecular i (E H) Shininess ] Ekvationen evalueras tre ggr: R, G, B. Speglande E H R N L i H= (E + L i ) / E + L i är en approximation av reflektionsvektorn R. 4

Phongmodellen i OpenGL Ljussättning av hörn Ljuskälla Ambient RGBA Diffuse RGBA Ambient RGBA Hörnets material Diffuse RGBA Specular RGBA, shininess + Hörn RGBA Specular RGBA Hörnets normal Ögats position (= världsorigo) Färg beräknas i varje hörn och interpoleras sedan över polygonen (Goraud shading). Bra att komma ihåg om ljussättning Då ljussättning är aktivt har aktuell färg ingen effekt. OpenGL stöder minst 8 aktiva ljuskällor. En ljuskälla avger en viss mängd av varje ljustyp. Då ljuskällans position specificras multipliceras den med aktuell modelviewmatris. Demo Back face culling Back face culling 90 o > 90 o Kamera glenable(gl_cull_face); 5

Normalen? Rastrering Fram/baksida beräknas genom tecknet i a = 0.5 x i y i - x i y i, 0 i (n - ), i (i + ) mod n, (x i, y i ) fönsterkoordinater för hörn nr i, n = antal hörn i polygonen Operationer på hörn: RGBA, z w, texturkoord. Fragment Denna beräkning visar om hörnen ligger i medsols eller motsols ordning. Konventionen är att motsols är riktat mot kameran. Operationer på bildelement Texturminne Bilddataspecifikation Operationer på bildelement Två typer av bilddata: Bitmap - bit per pixel. Bild - max 32 bitar per pixel. Finns ingen filformatstolk, data hämtas från C-array. (http://openil.sourceforge.net/) Byt plats på bytes i bilddata, delbilder Skalning & offset av bilddata, m.m. Processorminne Pixellagringslägen Pixeltransferoperationer Texturminne Bitmaps går direkt till rastreringen. Bilder går direkt till rastreringen eller lagras som texturdata (internt eller på grafikkortet). Rastrering (inkl. zoomning) Var ritas bilddata? Rita bild Aktuell rasterposition: glrasterpos2f(x, y); glrasterpos3f(x, y, z); glrasterpos4f(x, y, z, w); Då rasterpositionen anges transformeras den på samma sätt som övriga hörn. Jfr. position för ljuskällor! height gldrawpixels(width, height, format, type, const void *pixels); format R G B R G B R G B A R G B A R R R R (x w, y w, y w ) för aktuell rasterposition utgör origo för bilden/bitmapen. origo width type GL_UNSIGNED_BYTE GL_FLOAT 6

Texturer Texturer t s Demo MIP-maps Teknik för att undvika aliasing-problem vid texturförminskning. MIP-maps Filtrera ett antal texturer i förväg och lagra dem effektivt. Texturobjekt Filtreringsalternativ. Clamp/wrap-around för texturkoord. Texturobjekt Vid texturering väljs automatiskt den textur som passar bäst m.a.p. avstånd från kameran (om MIP-mapping är aktiverat). Texturkoordinat Texturappliceringsparametrar Texturkoordinater Rastrering 7

Texturobjekt Innehåller: Texturdata (texels). Information filter och texturkoordinatapplicering: gltexparameter Information om huruvida kopia av texturdata har laddats ned till grafikhårdvaran. Endast ett texturobjekt är aktivt! Förstoring och förminskning Textur FÖRSTORING Pixelpunkter på skärmen FÖRMINSKNING Pixelpunkter Textur på skärmen Alternativ: GL_NEAREST, GL_LINEAR, m.m. (Labbtips: GL_NEAREST_MIPMAP_LINEAR är default, men vi använder inte MIP-maps) Clamp/wrap around Texturdataspecifikation (s, t) = (.25, -2.75) t m GL_REPEAT GL_CLAMP origo n ram s (width, height) = (2 n + 2b, 2 m + 2b) där m, n är heltal 0, b = om texturen har ram, 0 annars. Texturdataspecifikation glteximage2d(gl_texture_2d, level, internalformat, width, height, border, format, type, const GLvoid *texels); level = MIP-mapnivå (= 0 på den här kursen) internalformat = internt lagringsformat (normalt = type) format, type som i gldrawpixels Observera att lagringslägen och transferoperationer även gäller texturer! Texturapplicering 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 = Kombinera texturdata med ljussättning/färg. OBS! LAGRAS INTE I TEXTUROBJEKT! 8

Texturkoordinater Texturkoordinater gltexcoord2f(s, t); gltexcoord3f(s, t, r); gltexcoord4f(s, t, r, q); Anges före glvertex (precis som för normaler). s' t' r' q' = T s t r q t glmatrixmode(gl_texture); Texturkartan indexeras sedan med (s'/q', t'/q'). r'/q' ignoreras normalt, men används vid 3D-texturering. s PPM-biblioteket #include <GL/glut.h> #include <ppm.h> GLuint tex; int main(int argc, char *argv) { float *texels; int w, h; w = ppmwidth( img.ppm ); h = ppmheight( img.ppm ); texels = ppmread( img.ppm, NULL); PPM-biblioteket glutcreatewindow( Win ); glgentextures(&tex, ); glteximage2d(, w, h,, texels); Programmet xv kan läsa/skriva PPM-bilder (gör module add graphics). På Windows: PaintShop Pro. Bufferttester Djupbuffert och djuptest Djuptest Färgbuffert Fragment = (R, G, B, A, djup, texturkoordinat) Färgbuffert Djupbuffert Fönster Fragment 9

Mer information om OpenGL Woo, Neider, Davis: The OpenGL Programming Guide, Addison Wesley Developer Press. Segal, Akeley: The OpenGL Graphics System: A Specification. Version.3. X-Windows och Win32 Kilgard, OpenGL Programming for the X Window System, Addison Wesley Developer Press. Fosner, OpenGL Programming for Windows 95 and Windows NT, Addison Wesley Developer Press. Problem? Gå till http://www.opengl.org/ 0