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

Relevanta dokument
En introduktion till OpenGL. Gustav Taxén

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

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

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

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-översikt. OpenGL. Lokala koordinatsystem. Transformationer. Hierarkiska modeller. Animation. Transformation Byte av koordinatsystem

OpenGL AGI HT05. Gustav Taxén

Transformationer i 3D. Gustav Taxén

Shaders. Gustav Taxén

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

Introduktion till OpenGL

Grafiska pipelinen. Edvin Fischer

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

RTG-formatet Gustav Taxén,

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

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

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

OpenGL, Maya och specialeffekter

OH-BILDER DATORGRAFIK HT 2005

OpenGL, Maya och specialeffekter

Rastrering och displayalgoritmer. Gustav Taxén

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

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

Homogena koordinater och datorgrafik

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

2 FRÅN VÄRLD TILL SKÄRM

Grafik i DrRacket AV TOMMY KARLSSON

F5: Högnivåprogrammering

F5: Högnivåprogrammering

Programmering av grafisk display

2D-grafik. Gustav Taxén

x 1 x 2 x 3 x 4 mera allmänt, om A är en (m n)-matris, då ger matrismultiplikationen en avbildning T A : R n R m.

Programmering av grafisk display

SgLib Simple Graphics Library

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

Procedurell grottgenerator och eld i GLSL. Marcus Widegren

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

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

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

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

Utmatningstekniker Vektoriserade (linjeritande) skärmar

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

Programmering B med Visual C

Programmering A. Johan Eliasson

OpenGL, Maya och specialeffekter

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

HAND TRACKING MED DJUPKAMERA

Information Coding / Computer Graphics, ISY, LiTH

SF1624 Algebra och geometri Lösningsförslag till tentamen Tisdagen den 15 december, 2009 DEL A

1 som går genom punkten (1, 3) och är parallell med vektorn.

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

Introduktion till fotogrammetrin

Transformationer, Angel

Borttagning av skymda ytor Painter s Algorithm och Z-buffering. MICHAEL HJORTHOLT och ANDREAS PAULSSON

Recap Mera om nya typer Kort Fält. Programmering. Sommarkurs Verónica Gaspes. IDE-sektionen.

Regel finns för strukturen på nätet Koordinatsystem anger element position

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

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.

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

Agenda. Arrayer deklaration, åtkomst Makron Flerdimensionella arrayer Initiering Strängar Funktioner och arrayer. Övningar nu och då

Geometriska transformationer

Procedurell 3D-eld på grafikkortet

LINJÄRA AVBILDNINGAR

Simulering av rök på GPU

Grafiska pipelinens funktion

Procedurell Terräng med LOD i OpenGL 4

LUNDS UNIVERSITET. Parallell exekvering av Float32 och INT32 operationer

TBSK03 Teknik för avancerade Datorspel. Jens Ogniewski Information Coding Group Linköpings universitet

TANA17 Matematiska beräkningar med Matlab

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

Linjär Algebra, Föreläsning 2

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

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

TENTAMEN PROGRAMMERING I JAVA, 5P SOMMARUNIVERSITETET

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

(8) OpenGL-Pipeline. Vorlesung Computergrafik T. Grosch

Koordinatsystem och Navigation

SKRIVNING I VEKTORGEOMETRI

Programmeringsteknik med C och Matlab

Enkla datatyper minne

Abstrakta datatyper. Primitiva vektorer. Deklarera en vektor

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

OOMPA 2D1359 Föreläsning 8

Introduktion till objektorientering. Vad är objektorientering egentligen? Hur relaterar det till datatyper? Hur relaterar det till verkligheten?

OOP Objekt-orienterad programmering

Programmering = modellering

Datorseende. Niels Chr Overgaard Januari 2010

Arv: Fordonsexempel. Arv. Arv: fordonsexempel (forts) Arv: Ett exempel. En klassdefinition class A extends B {... }

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

KURSMÅL WINDOWS STARTA KURSEN

Introduktion till fotogrammetrin

DEL I. Matematiska Institutionen KTH. Lösning till tentamensskrivning på kursen Linjär algebra II, SF1604, den 15 mars 2010 kl

Parameteröverföring. Exempel. Exempel. Metodkropp

Affina avbildningar och vektorgrafik

OOP F1:1. Föreläsning 1. Introduktion till kursen OOP Vad är Java? Ett första Java-program Variabler Tilldelning. Marie Olsson

2D1387 Programsystemkonstruktion med C++ Laboration 1: Grundläggande C++ 31 augusti 2005

Idag. statiska metoder och variabler. private/public/protected. final, abstrakta klasser, gränssnitt, delegering. wrapper classes

Emacs. Eric Elfving Institutionen för datavetenskap (IDA) 22 augusti 2016

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

Transkript:

Introduktion till OpenGL Battlezone Atari corp., 1980. Gustav Taxén CID gustavt@nada.kth.se Varför behövs grafikbibliotek? Grafikhårdvara Skillnader i funktionalitet och möjligheter. Skillnader i styrning. Plattformar Skillnader i operativsystem. Applikationer Målet är att koden skall vara densamma oberoende av hårdvara och plattform. OpenGL är ett grafikbibliotek Specifikationen är oberoende av plattform och operativsystem. Alla implementationer måste tillhandahålla all funktionalitet. Systemberoende del sköter datautbyte mellan OpenGL och operativsystem. Enbart rendering: inget stöd för inenheter, fönsterhantering, etc. Fördelar med OpenGL Portabelt. Kraftfullt. Enkelt att använda. Anpassat för 3D-grafikhårdvara men kan även användas för att rita 2D. Effektivt för 3D-grafikhårdvara. Används i industrin. Nackdelar med OpenGL Kan vara ineffektivt på 2Dgrafikhårdvara. OpenGL-kod kan ge många funktionsanrop. Bristfälligt stöd från Microsoft på Windows-plattformar (mjukvara). Oviss framtid? Allmänt om OpenGL Utvecklat av Silicon Graphics (SGI). Kontrolleras av ett Architectural Review Board: 3Dfx, 3DLabs, ATI, Compaq, Evans & Sutherland, HP, IBM, Intel, Microsoft, nvidia, SGI, Sun. Licens måste köpas för utveckling av implementation. Gratis att använda. Mesa: GNU-implementation som har SGIs godkännande. 1

Delbibliotek Pipeline-modell OpenGL Renderingsfunktionalitet. GLU (OpenGL Utility Library) Hjälpfunktioner för bl.a. transformationer. GLX Sköter datautbyte mellan X Window System och OpenGL (GLW på Windows). GLUT Ljussättning Geometribeskrivning Ljussättningsmodell Avbildningsmetod Avbildning Rendering Bildelement Översikt över OpenGL Datapipeline Geometri Operationer på hörn Hörn Op. på hörn Transformerade och ljussatta hörn Rastrering Operationer på fragment Bilddata Op. på bildelement Rastrering Bilddata Operationer på bildelement Texturminne Framebuffert (bildbuffert + hjälpbuffertar) Op. på fragment Fragment (färg + djup + texturkoordinater) Buffertvärden Framebuffert (bildbuffert + hjälpbuffertar) Exempel 1: bildbuffert #include <GL/glut.h> void display(void) { int main(int argc, char *argv[]) { glutinit(&argc, argv); glutinitdisplaymode(glut_rgb GLUT_DOUBLE); glutcreatewindow("exempel 1"); glutdisplayfunc(display); glutmainloop(); return 0; Exempel 1, forts. Välj dubbel RGB-färgbuffert glutinitdisplaymode(glut_rgb GLUT_DOUBLE); R, G, B Synlig Gömd 2

Exempel 1, forts. Vilken färg (RGB) skall färbufferten få när den rensas? Vilket alpha (A) skall alphabufferten få när den rensas? R G B A RGB-färgbuffert och alphabuffert R, G, B A Exempel 1, forts. Rensa färg- och alphabuffert R = 0.1 G = 0.2 B = 0.3 (A = 1.0) Synlig Gömd Exempel 1, forts. Resultat, exempel 1 Byt plats på synlig och gömd buffert Synlig Gömd Exempel 2: geometrispecifikation void display(void) { glcolor3f(1.0, 1.0, 1.0); glvertex3f(1.0, 0.0, 0.0); glvertex3f(0.0, 1.0, 0.0); glvertex3f(0.0, 0.0, 1.0); Exempel 2, forts. b s i f d ub us ui Ändra aktuell färg glcolor3f(1.0, 1.0, 1.0); Antal argument R G B Argumentens datatyp byte short int Alla kombinationer är inte float double relevanta för alla kommandon! unsigned byte unsigned short unsigned int 3

Exempel 2, forts. Resultat, exempel 2 Geometrispecifikation glvertex3f(1.0, 0.0, 0.0); glvertex3f(0.0, 1.0, 0.0); glvertex3f(0.0, 0.0, 1.0); Alla hörn anges i homogena koordinater. Om w saknas sätts den till 1.0. Om z saknas sätts den till 0.0. Mer om detta i transformationsföreläsningen! Det är tillåtet (och önskvärt) att ange fler primitiver i rad. Viktigt att komma ihåg: Transformationer Transformation OpenGL är en tillståndsmaskin. Projektion Transformation Viewporttransformation Transformationer i OpenGL Modelview-matrisen Objektkoord. x o y o z o w o Matrisstack x w y w z w Ögonkoord. x e y e z e w e Perspektivdivision Viewporttransformation Matrisstack x n y n z n Klippkoord. x c y c z c w c Modelviewmatris Projektionsmatris Objektkoordinater anges med glvertex. Modelview-matrisen M omvandlar till ögonkoordinater: v e = M v o. M positionerar modeller (objekt) i världen. Normaler transformeras också. Ljussättning görs i ögonkoordinater. Fönsterkoord. Normerade enhetskoord. 4

Projektionsmatrisen Projektionsmatrisen P omvandlar ögonkoordinater till klippkoordinater: v c = P v e. P projicerar hörnen på ett bildplan och definierar samtidigt en vy-volym. Alla primitiver klipps mot denna volym. Kameran sitter i (0, 0, 0) och ser i riktningen (0, 0, -1). Perspektivdivision och viewport-transformation 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 [-1, 1]. Viewport-transformation: skalning och offset i bildbufferten. Skalning och offset anges i fönsterkoordinater. Exempel 3: transformation void display(void) { glmatrixmode(gl_modelview); gltranslatef(0.0, 0.0, -3.0); glcolor3f(1.0, 1.0, 1.0); glvertex3f(1.0, 0.0, 0.0); glvertex3f(0.0, 1.0, 0.0); glvertex3f(0.0, 0.0, 1.0); Exempel 3, forts. (0,0,1) z glmatrixmode(gl_modelview); gltranslatef(0.0, 0.0, -3.0); y (0,1,0) (0,0,-2) (1,0,0) x (0,1,-3) (1,0,-3) Exempel 3, forts. Matriskommandon glmatrixmode Sätt aktuell matristyp. glloadidentity Ersätt med identitetsmatrisen. gltranslate Multiplicera med translationsmatris. glrotate Multiplicera med rotationsmatris. glscale Multiplicera med skalningsmatris. glmultmatrix Multiplicera med specificerad matris. glloadmatrix Ersätt med specificerad matris. glpushmatrix Pusha aktuell matris på stacken. glpopmatrix Ersätt med matris som ligger överst på stacken. Exempel 3, forts. Transformation Byte av koordinatsystem gltranslatef(0,0,-3); glrotatef(50,0,1,0); gltranslatef(0,0,3); glvertex3f(1,0,0); glvertex3f(0,1,0); glvertex3f(0,0,1); 5

Viktigt att komma ihåg: glpushmatrix pushar aktuellt koordinatsystem på stacken. glpopmatrix ersätter aktuellt koordinatsystem med det som finns överst på stacken. Exempel 4: projektionsspecifikation void reshape(int width, int height) { glmatrixmode(gl_projection); gluperspective(45, (GLfloat) width / (GLfloat) height, 0.5, 10.0); glviewport(0, 0, width, height); int main(int argc, char *argv[]) {... glutcreatewindow("exempel 4"); glutdisplayfunc(display); glutreshapefunc(reshape);... Viktigt att komma ihåg: OpenGLs kamera sitter alltid i origo och ser i riktningen (0,0,-1). Kameran kan inte flyttas. Exempel 4, forts. Perspektivprojektion gluperspective(angle, aspect, near, far); y bildplan angle z x near far Exempel 4, forts. Ortogonalprojektion glortho(left, right, bottom, top, near, far); y left, top bildplan z x right, bottom near far Exempel 4, forts. Skalning och offset av bildplanet glviewport(ox, oy, sx, sy); sy sx (ox, oy) 6

Resultat, exempel 4 7