Racunarska grafika - Biblioteka OpenGLpoincare.matf.bg.ac.rs/~ivan/files/rg/folije-ivan.pdf ·...

26
Računarska grafika Biblioteka OpenGL Godina 2017/2018. Ivan Čukić [email protected] poincare.math.rs/~ivan Matematički fakultet, Univerzitet u Beogradu

Transcript of Racunarska grafika - Biblioteka OpenGLpoincare.matf.bg.ac.rs/~ivan/files/rg/folije-ivan.pdf ·...

Page 1: Racunarska grafika - Biblioteka OpenGLpoincare.matf.bg.ac.rs/~ivan/files/rg/folije-ivan.pdf · Tipovi sufiks tippodataka OpenGLtip b 8-bitinteger GLbyte s 16-bitinteger GLshort i

Računarska grafikaBiblioteka OpenGL

Godina 2017/2018.

Ivan Čukić

[email protected]/~ivanMatematički fakultet, Univerzitet u Beogradu

Page 2: Racunarska grafika - Biblioteka OpenGLpoincare.matf.bg.ac.rs/~ivan/files/rg/folije-ivan.pdf · Tipovi sufiks tippodataka OpenGLtip b 8-bitinteger GLbyte s 16-bitinteger GLshort i

Uz veliku zahvalnostAleksandru B. Samardžiću

Page 3: Racunarska grafika - Biblioteka OpenGLpoincare.matf.bg.ac.rs/~ivan/files/rg/folije-ivan.pdf · Tipovi sufiks tippodataka OpenGLtip b 8-bitinteger GLbyte s 16-bitinteger GLshort i

Legenda

OpenGLOpenGL Core ProfileOpenGL Compatibility Profile

OpenGL Utility LibraryOpenGL Utility ToolkitOpenGL Extension Wrangler

Sekcija u beleškama za predavanja, Predrag Janičić

OpenGL Programming Guide (Red Book), 7th editionLink ka objašnjenju pojma na Wikipedia.orgLink ka arhivi sa izvornim kôdom

3

Page 4: Racunarska grafika - Biblioteka OpenGLpoincare.matf.bg.ac.rs/~ivan/files/rg/folije-ivan.pdf · Tipovi sufiks tippodataka OpenGLtip b 8-bitinteger GLbyte s 16-bitinteger GLshort i

UVOD

OpenGL

GLUT

Osnove iscrtavanja

Page 5: Racunarska grafika - Biblioteka OpenGLpoincare.matf.bg.ac.rs/~ivan/files/rg/folije-ivan.pdf · Tipovi sufiks tippodataka OpenGLtip b 8-bitinteger GLbyte s 16-bitinteger GLshort i

Mogućnosti

Definisanje tačaka, linija, poligona u prostoru

Postavljanje osvetljenja

Postavljanje pozicije posmatrača i osobina pogleda

5

Page 6: Racunarska grafika - Biblioteka OpenGLpoincare.matf.bg.ac.rs/~ivan/files/rg/folije-ivan.pdf · Tipovi sufiks tippodataka OpenGLtip b 8-bitinteger GLbyte s 16-bitinteger GLshort i

Sintaksa

Komande imaju prefix g lg l B e g i n , g l V e r t e x

Konstante imaju prefix G L _G L _ M U L T I S A M P L E , G L _ P O L Y G O N

Tipovi podataka imaju prefix G LG L b y t e , G L d o u b l e

Red Book: 1.2

6

Page 7: Racunarska grafika - Biblioteka OpenGLpoincare.matf.bg.ac.rs/~ivan/files/rg/folije-ivan.pdf · Tipovi sufiks tippodataka OpenGLtip b 8-bitinteger GLbyte s 16-bitinteger GLshort i

Osobine

Minimalan API

Ne zavisi od platforme

Ne zavisi od UI biblioteke

Mašina stanjaState machine

7

Page 8: Racunarska grafika - Biblioteka OpenGLpoincare.matf.bg.ac.rs/~ivan/files/rg/folije-ivan.pdf · Tipovi sufiks tippodataka OpenGLtip b 8-bitinteger GLbyte s 16-bitinteger GLshort i

Overloading

g l C o m m a n d nt[v]

n - koliko funkcija prima argumenata

t - oznaka tipa argumenta

v - ako se argumenti prosleđuju kao vektor, odnosnopokazivač na nulti element

Primeri:

g l V e r t e x 3 f ( x , y , z )

g l V e r t e x 2 i v ( n i z )

8

Page 9: Racunarska grafika - Biblioteka OpenGLpoincare.matf.bg.ac.rs/~ivan/files/rg/folije-ivan.pdf · Tipovi sufiks tippodataka OpenGLtip b 8-bitinteger GLbyte s 16-bitinteger GLshort i

Tipovi

sufiks tip podataka OpenGL tip

b 8-bit integer GLbytes 16-bit integer GLshorti 32-bit integer GLint

f 32-bit real GLfloatd 64-bit real GLdouble

ub 8-bit unsigned integer GLubyte, GLbooleanus 16-bit unsigned integer GLushortui 32-bit unsigned integer GLuint, GLenum, GLbitfield

9

Page 10: Racunarska grafika - Biblioteka OpenGLpoincare.matf.bg.ac.rs/~ivan/files/rg/folije-ivan.pdf · Tipovi sufiks tippodataka OpenGLtip b 8-bitinteger GLbyte s 16-bitinteger GLshort i

Pipeline

OpenGL 1.xFixed pipeline

transformacija temena8

odsecanje (clipping) 5.2

rasterizacija

osvetljavanje

operacije nad pikselima

Compatibility profile in 3.2g l B e g i n

OpenGL 2.x, 3.xProgrammable pipeline

Svaki korak je mogućeprogramirati Shader

Vertex shader

Geometry shader

Fragment (pixel) shader

Core profile in 3.2g l E n a b l e

Red Book: 1.5

10

Page 11: Racunarska grafika - Biblioteka OpenGLpoincare.matf.bg.ac.rs/~ivan/files/rg/folije-ivan.pdf · Tipovi sufiks tippodataka OpenGLtip b 8-bitinteger GLbyte s 16-bitinteger GLshort i

Pomoćne biblioteke

GLU - OpenGL Utility Libraryg l u O r t h o 2 D

GLUT - OpenGL Utility Toolkitg l u t M a i n L o o p

GLEW - OpenGL Extension Wrangler Libraryg l e w G e t C o n t e x t

11

Page 12: Racunarska grafika - Biblioteka OpenGLpoincare.matf.bg.ac.rs/~ivan/files/rg/folije-ivan.pdf · Tipovi sufiks tippodataka OpenGLtip b 8-bitinteger GLbyte s 16-bitinteger GLshort i

GLUT biblioteka

Mogućnosti:

Korisničko okruženje 2.3 3.1

Obrada događaja

Pomoć pri iscrtavanju

Alternative: Qt, GTK+, Swing, ...

Program: 01-quad

12

Page 13: Racunarska grafika - Biblioteka OpenGLpoincare.matf.bg.ac.rs/~ivan/files/rg/folije-ivan.pdf · Tipovi sufiks tippodataka OpenGLtip b 8-bitinteger GLbyte s 16-bitinteger GLshort i

GLUT biblioteka

Inicijalizacija biblioteke:

g l u t I n i t

g l u t I n i t D i s p l a y M o d e

Kreiranje prozora:

g l u t I n i t W i n d o w S i z e

g l u t I n i t W i n d o w P o s i t i o n

g l u t C r e a t e W i n d o w

Program: 01-quad

13

Page 14: Racunarska grafika - Biblioteka OpenGLpoincare.matf.bg.ac.rs/~ivan/files/rg/folije-ivan.pdf · Tipovi sufiks tippodataka OpenGLtip b 8-bitinteger GLbyte s 16-bitinteger GLshort i

GLUT biblioteka

Callback funkcije:

g l u t D i s p l a y F u n c

g l u t K e y b o a r d F u n c

g l u t M o u s e F u n c

UI petlja i iscrtavanje:

g l u t M a i n L o o p

g l u t S w a p B u f f e r s

Program: 01-quad

14

Page 16: Racunarska grafika - Biblioteka OpenGLpoincare.matf.bg.ac.rs/~ivan/files/rg/folije-ivan.pdf · Tipovi sufiks tippodataka OpenGLtip b 8-bitinteger GLbyte s 16-bitinteger GLshort i

Parametri iscrtavanja

Model boja: RGB, RGBA 12.4.3

Double-buffering 3.3.4

Z-buffer 11.4

16

Page 17: Racunarska grafika - Biblioteka OpenGLpoincare.matf.bg.ac.rs/~ivan/files/rg/folije-ivan.pdf · Tipovi sufiks tippodataka OpenGLtip b 8-bitinteger GLbyte s 16-bitinteger GLshort i

Double-buffering

Ekran

Prikazani bafer Bafer po kome crtamo

17

Page 18: Racunarska grafika - Biblioteka OpenGLpoincare.matf.bg.ac.rs/~ivan/files/rg/folije-ivan.pdf · Tipovi sufiks tippodataka OpenGLtip b 8-bitinteger GLbyte s 16-bitinteger GLshort i

Z-buffer

Iscrtana slika Z-buffer

Program: 02-quad-test-depth

18

Page 19: Racunarska grafika - Biblioteka OpenGLpoincare.matf.bg.ac.rs/~ivan/files/rg/folije-ivan.pdf · Tipovi sufiks tippodataka OpenGLtip b 8-bitinteger GLbyte s 16-bitinteger GLshort i

Podrazumevani pogled

Vidljivi prostor [−1, 1]3 ⊂ R3

Ortogonalna projekcija na xy ravan (front-elevation)8.3

19

Page 20: Racunarska grafika - Biblioteka OpenGLpoincare.matf.bg.ac.rs/~ivan/files/rg/folije-ivan.pdf · Tipovi sufiks tippodataka OpenGLtip b 8-bitinteger GLbyte s 16-bitinteger GLshort i

DODATAK

Editori

Kompajler

make

Page 21: Racunarska grafika - Biblioteka OpenGLpoincare.matf.bg.ac.rs/~ivan/files/rg/folije-ivan.pdf · Tipovi sufiks tippodataka OpenGLtip b 8-bitinteger GLbyte s 16-bitinteger GLshort i

Editor

Emacs

Vim

Kate, KWrite, etc.

21

Page 22: Racunarska grafika - Biblioteka OpenGLpoincare.matf.bg.ac.rs/~ivan/files/rg/folije-ivan.pdf · Tipovi sufiks tippodataka OpenGLtip b 8-bitinteger GLbyte s 16-bitinteger GLshort i

Kompajler

Kompilacija:

gcc i z v o r n i _ f a j l . c −o i z v r s n i _ f a j l

Pokretanje

. / i z v r s n i _ f a j l

22

Page 23: Racunarska grafika - Biblioteka OpenGLpoincare.matf.bg.ac.rs/~ivan/files/rg/folije-ivan.pdf · Tipovi sufiks tippodataka OpenGLtip b 8-bitinteger GLbyte s 16-bitinteger GLshort i

Linkovanje dodatnih biblioteka

- l – library

gcc . . . −l b ib l io teka1 −l b ib l io teka2 . . .gcc . . . −lm −lGL −lGLU − l g l u t . . .

- L – library-path

gcc . . . −L / usr /X11R6/ l i b −L / usr /pkg/ l i b . . .

23

Page 24: Racunarska grafika - Biblioteka OpenGLpoincare.matf.bg.ac.rs/~ivan/files/rg/folije-ivan.pdf · Tipovi sufiks tippodataka OpenGLtip b 8-bitinteger GLbyte s 16-bitinteger GLshort i

Include putanje

- I – include-path

gcc . . . −I / usr /X11R6/ include −I / usr /pkg/ include . . .

24

Page 25: Racunarska grafika - Biblioteka OpenGLpoincare.matf.bg.ac.rs/~ivan/files/rg/folije-ivan.pdf · Tipovi sufiks tippodataka OpenGLtip b 8-bitinteger GLbyte s 16-bitinteger GLshort i

Drugi korisni argumenti

- W a l l – prijavljuje sva upozorenja- a n s i – prati ANSI C standard- g – uključuje debug simbole u izvršni fajl

25

Page 26: Racunarska grafika - Biblioteka OpenGLpoincare.matf.bg.ac.rs/~ivan/files/rg/folije-ivan.pdf · Tipovi sufiks tippodataka OpenGLtip b 8-bitinteger GLbyte s 16-bitinteger GLshort i

Makefile, GNU make

Makefile pravilo:

c i l j : zav i snost i−> komande za prav l jen je c i l j a

Primer 1. Kompilacija programa

program : main . c−> gcc −o program −lm −ansi −g −Wall main . c

Primer 2. Brisanje binarnih fajlovaclean :−> −rm −f program−> −rm −f * .o

- > je tabulator. Ako se zameni razmacima, komanda m a k e neće raditi26