53
TWORZENIE 3D GRAFIKI W ANDROID W OPARCIU O OPENGL ES by Artem Shubovych

Tworzenie grafiki 3D w android

  • Upload
    -

  • View
    145

  • Download
    2

Embed Size (px)

Citation preview

Page 1: Tworzenie grafiki 3D w android

TWORZENIE 3D GRAFIKI WANDROID

W OPARCIU O OPENGL ESby Artem Shubovych

Page 2: Tworzenie grafiki 3D w android

TREŚĆ1. co to jest shadery2. co można zrobić przy użyciu shaderów3. jak działa stos renderingu4. użycie shaderów w Android5. sterowanie wyświetlieniem

Page 3: Tworzenie grafiki 3D w android

DLACZEGO UŻYĆ OPENGL?tworzenie gieranimacjasystemy CADgraficzne przedstawienie informacji(dla fanatyków) zwiększenie prędkości zwykłej aplikacji

Page 4: Tworzenie grafiki 3D w android

DLACZEGO UŻYĆ OPENGL?tworzenie gieranimacja

Page 5: Tworzenie grafiki 3D w android

OPENGL PIPELINE1. przetwarzanie koordynat2. obliczenie oświetlenia3. aplikacja materialów

wykrywanie koloru każdego wierzhołku

4. aplikacja tekstur5. dopasowanie efektów

mgła, alpha test, depth test, pattern test, blending...

6. wyświetlenie na ekranie

Page 6: Tworzenie grafiki 3D w android

EWOLUCJA PROGRAMISTY OPENGL

Page 7: Tworzenie grafiki 3D w android

FIXED PIPELINEg l B e g i n ( G L _ P O L Y G O N ) ; g l C o l o r 3 f ( 0 , 1 , 0 ) ; g l V e r t e x 3 f ( - 1 , - 1 , 0 ) ; g l V e r t e x 3 f ( - 1 , 1 , 0 ) ; g l V e r t e x 3 f ( 1 , 1 , 0 ) ; g l V e r t e x 3 f ( 1 , - 1 , 0 ) ;g l E n d ( ) ;

Page 8: Tworzenie grafiki 3D w android

DISPLAY LISTSG L u i n t i n d e x = g l G e n L i s t s ( 1 ) ;

g l N e w L i s t ( i n d e x , G L _ C O M P I L E ) ; g l B e g i n ( G L _ P O L Y G O N ) ; g l C o l o r 3 f ( 0 , 1 , 0 ) ; g l V e r t e x 3 f ( - 1 , - 1 , 0 ) ; g l V e r t e x 3 f ( - 1 , 1 , 0 ) ; g l V e r t e x 3 f ( 1 , 1 , 0 ) ; g l V e r t e x 3 f ( 1 , - 1 , 0 ) ; g l E n d ( ) ;g l E n d L i s t ( ) ;

/ / . . .

g l C a l l L i s t ( i n d e x ) ;

Page 9: Tworzenie grafiki 3D w android

DRAWABLE ARRAYSG L f l o a t v e r t i c e s [ ] = { - 1 , - 1 , 0 , - 1 , 1 , 0 , 1 , 1 , 0 , 1 , - 1 , 0 } ;

g l E n a b l e C l i e n t S t a t e ( G L _ V E R T E X _ A R R A Y ) ;g l V e r t e x P o i n t e r ( 3 , G L _ F L O A T , 0 , v e r t i c e s ) ;g l D r a w A r r a y s ( G L _ P O L Y G O N S , 0 , 4 ) ;g l D i s a b l e C l i e n t S t a t e ( G L _ V E R T E X _ A R R A Y ) ;

Page 10: Tworzenie grafiki 3D w android

VERTEX BUFFER OBJECTSG L f l o a t v e r t i c e s [ ] = { - 1 , - 1 , 0 , - 1 , 1 , 0 , 1 , 1 , 0 , 1 , - 1 , 0 } ;G L u i n t v b o I d ;

g l G e n B u f f e r s A R B ( 1 , & v b o I d ) ;g l B i n d B u f f e r A R B ( G L _ A R R A Y _ B U F F E R _ A R B , v b o I d ) ;g l B u f f e r D a t a A R B ( G L _ A R R A Y _ B U F F E R _ A R B , s i z e o f ( v e r t i c e s ) , v e r t i c e s , G L _ S T A T I C _ D R A W _ A R B ) ;

/ / . . .

g l B i n d B u f f e r A R B ( G L _ A R R A Y _ B U F F E R _ A R B , v b o I d ) ;g l E n a b l e C l i e n t S t a t e ( G L _ V E R T E X _ A R R A Y ) ;g l V e r t e x P o i n t e r ( 3 , G L _ F L O A T , 0 , 0 ) ;g l D r a w A r r a y s ( G L _ P O L Y G O N S , 0 , 1 2 ) ;g l D i s a b l e C l i e n t S t a t e ( G L _ V E R T E X _ A R R A Y ) ;g l B i n d B u f f e r A R B ( G L _ A R R A Y _ B U F F E R _ A R B , 0 ) ;

Page 11: Tworzenie grafiki 3D w android

SHADER - CO TO JEST?krótki program komputerowy, (...), który w

grafice trójwymiarowej opisuje właściwościpikseli oraz wierzchołków.

Page 12: Tworzenie grafiki 3D w android

TYPY SHADERÓWvertex shaderfragment shadershader program

Page 13: Tworzenie grafiki 3D w android

UŻYCIE SHADERÓWW OPENGL

1. kompilacja wierzchołkowego shaderu2. kompilacja fragment'owego shaderu3. linkowanie programu4. przekazywanie wskazówników

o dane do programu5. przekazywanie danych do programu

Page 14: Tworzenie grafiki 3D w android

KOMPILACJA SHADERÓWWIERZCHOŁKOWY SHADER

/ / k o m p i l u j e m y w i e r z c h o ł k o w y s h a d e rG L i n t c o m p i l e _ o k = G L _ F A L S E , l i n k _ o k = G L _ F A L S E , p r o g r a m ;G L u i n t v s = g l C r e a t e S h a d e r ( G L _ V E R T E X _ S H A D E R ) ;c o n s t c h a r * v s _ s o u r c e = " . . . " ;g l S h a d e r S o u r c e ( v s , 1 , & v s _ s o u r c e , N U L L ) ;g l C o m p i l e S h a d e r ( v s ) ;g l G e t S h a d e r i v ( v s , G L _ C O M P I L E _ S T A T U S , & c o m p i l e _ o k ) ;

Page 15: Tworzenie grafiki 3D w android

KOMPILACJA SHADERÓWFRAGMENTOWY SHADER

/ / k o m p i l u j e m y f r a g m e n t o w y s h a d e rG L u i n t f s = g l C r e a t e S h a d e r ( G L _ F R A G M E N T _ S H A D E R ) ;c o n s t c h a r * f s _ s o u r c e = " . . . " ;g l S h a d e r S o u r c e ( f s , 1 , & f s _ s o u r c e , N U L L ) ;g l C o m p i l e S h a d e r ( f s ) ;g l G e t S h a d e r i v ( f s , G L _ C O M P I L E _ S T A T U S , & c o m p i l e _ o k ) ;

Page 16: Tworzenie grafiki 3D w android

LINKING PROGRAMU/ / l i n k u j e m y p r o g r a mp r o g r a m = g l C r e a t e P r o g r a m ( ) ;g l A t t a c h S h a d e r ( p r o g r a m , v s ) ;g l A t t a c h S h a d e r ( p r o g r a m , f s ) ;g l L i n k P r o g r a m ( p r o g r a m ) ;g l G e t P r o g r a m i v ( p r o g r a m , G L _ L I N K _ S T A T U S , & l i n k _ o k ) ;

Page 17: Tworzenie grafiki 3D w android

PRZEKAZYWANIE DANYCH DO PROGRAMU/ / z a c h o w u j e m y w s k a z ó w n i k o z m i e n n e j s h a d e r u w k l i e n t s k i m p r o g r a m uG L i n t a t t r i b u t e _ c o o r d 2 d ;c o n s t c h a r * a t t r i b u t e _ n a m e = " c o o r d 2 d " ;a t t r i b u t e _ c o o r d 2 d = g l G e t A t t r i b L o c a t i o n ( p r o g r a m , a t t r i b u t e _ n a m e ) ;

Page 18: Tworzenie grafiki 3D w android

RENDERING Z UŻYCIEM SHADERU/ / p r e k a z u j e m y d a n e p r z e z w s k a z ó w n i k d o p r o g r a m u/ / j u ż n a e t a p u r e n d e r i n g u

g l U s e P r o g r a m ( p r o g r a m ) ;g l E n a b l e V e r t e x A t t r i b A r r a y ( a t t r i b u t e _ c o o r d 2 d ) ;g l V e r t e x A t t r i b P o i n t e r ( a t t r i b u t e _ c o o r d 2 d , / / c o p r z e k a z u j e m y d o p r o g r a m u 2 , / / i l e e l e m e n t ó w d l a k a ż d e j w i e r z c h ó w k i G L _ F L O A T , / / t y p k a ż d e g o e l e m e n t u G L _ F A L S E , / / u ż y c i e o f f s e t ó w 0 , / / o f f s e t v e r t i c e s / / w s k a z ó w n i k d o d a n y c h) ;

g l D r a w A r r a y s ( G L _ P O L Y G O N S , 0 , 4 ) ;g l D i s a b l e V e r t e x A t t r i b A r r a y ( a t t r i b u t e _ c o o r d 2 d ) ;

Page 19: Tworzenie grafiki 3D w android

PRZEKAZYWANIE DANYCH DO SHADERU1. zachowywanie wskazównika do

atrybutu shaderu2. włączenie odpowiednego atrybutu3. wskazywanie adresu danych4. wyłączenie atrybutu

Page 20: Tworzenie grafiki 3D w android

WEJŚCIE WIERZHOŁKOWEGO SHADERUmaterial(diffuse, specular, shininess...)

silnikowe(kamera, model, oświetlenie, tajmery...)

rendererowe(zdefiniowane przez użytkownika)

Page 21: Tworzenie grafiki 3D w android

WYJŚCIE WIERZHOŁKOWEGO SHADERUpozycjarozmiar wierzhółkidługość do przycinania

Page 22: Tworzenie grafiki 3D w android

WEJŚCIE FRAGMENTOWEGO SHADERUpozycjanormalenumer prymitywudługość do przycinaniainne

Page 23: Tworzenie grafiki 3D w android

WYJŚCIE FRAGMENTOWEGO SHADERUidentyfikator materialupozycjanormalediffuse colorspecular colorgłębokośćinne

Page 24: Tworzenie grafiki 3D w android

IDENTITY SHADERSVERTEX SHADER

u n i f o r m m a t 4 u _ M V P M a t r i x ;a t t r i b u t e v e c 4 a _ P o s i t i o n ;v o i d m a i n ( ){ g l _ P o s i t i o n = u _ M V P M a t r i x * a _ P o s i t i o n ;}

FRAGMENT SHADER

v a r y i n g v e c 4 v _ C o l o r ;v o i d m a i n ( ){ g l _ F r a g C o l o r [ 0 ] = 0 . 0 ; g l _ F r a g C o l o r [ 1 ] = 0 . 0 ; g l _ F r a g C o l o r [ 2 ] = 1 . 0 ;}

Page 25: Tworzenie grafiki 3D w android

PIĘKNOŚĆ GRY KOMPUTEROWEJefekty nieba, wody, pogody, ognia, mgły, dymu...rzeźba terenumodele high poly

Page 26: Tworzenie grafiki 3D w android

CO MOŻNA UTWORZYĆ DZIĘKI SHADERAM

Page 27: Tworzenie grafiki 3D w android

OPENGL W ANDROIDTO TYLKO OPENGL ES

słabszy sprzęt → mniej możliwości

słabszy sprzęt → mniej efektów

słabszy sprzęt → mniej modele

słabszy sprzęt → mniej animacji

Page 28: Tworzenie grafiki 3D w android

CZYM SIĘ RÓŻNIĄ OPENGL ORAZ OPENGL ES?

Page 29: Tworzenie grafiki 3D w android

OPENGLobsługuje wielepodejść renderingu(fixed pipeline, displaylists, VBO, drawablearrays...)dowolne type danych

OPENGL EStylko VBOwyłącznie dane typówfixed-pointusunięty prymitywyrenderingowe

Page 30: Tworzenie grafiki 3D w android

OPTYMIZACJI GIER W ANDROIDefekty nieba, wody, pogody, ognia, mgły, dymu...rzeźba terenumodele high poly

Page 31: Tworzenie grafiki 3D w android

CO MOŻNA ZROBIĆ W OPENGL ES?

Page 32: Tworzenie grafiki 3D w android
Page 33: Tworzenie grafiki 3D w android

ZALETY OPENGL ESmożna zrobić grę trójwymiarowę dla mobilnych urządzeńszybke przepisanie kodu do OpenGLWebGL - jeszcze więcej przenośności!

Page 34: Tworzenie grafiki 3D w android

WADY OPENGL ESzłożonośćmałe API

Page 35: Tworzenie grafiki 3D w android

ZŁOŻONOŚĆ OPENGL ESwyświetlienie animacji MD2→500+ wierszów kodu!

Page 36: Tworzenie grafiki 3D w android

BIBLIOTEKIJPCTLWJGLjMonkey

Page 37: Tworzenie grafiki 3D w android

JAK ZACZĄĆ PRACOWAĆ Z OPENGL ES?

Page 38: Tworzenie grafiki 3D w android

1. TWORZYMY POWIERZHNIĘ

Page 39: Tworzenie grafiki 3D w android

2. USTALIMY RENDERER

Page 40: Tworzenie grafiki 3D w android

3. DEFINUJEMY LOGIKĘ KIEROWANIA

Page 41: Tworzenie grafiki 3D w android

PRZESUWANIE KAMERYmViewMatrix ← Matrix.setLookAtM(...)MVPMatrix ← mProjectionMatrix × mViewMatrixgl_Position = u_MVPMatrix * a_Position

u n i f o r m m a t 4 u _ M V P M a t r i x ;a t t r i b u t e v e c 4 a _ P o s i t i o n ;v o i d m a i n ( ){ g l _ P o s i t i o n = u _ M V P M a t r i x * a _ P o s i t i o n ;}

Page 42: Tworzenie grafiki 3D w android

PRZESUWANIE MODELEsetIdentity(...)mMVPMatrix ← mViewMatrix × mModelMatrixmMVPMatrix ← mProjectionMatrix × mMVPMatrixgl_Position = u_MVPMatrix * a_Position

Page 43: Tworzenie grafiki 3D w android

PRZYKŁAD - RUCH KAMERY

Page 44: Tworzenie grafiki 3D w android
Page 45: Tworzenie grafiki 3D w android

PRZYKŁAD - RUCH KAMERY

Page 46: Tworzenie grafiki 3D w android
Page 47: Tworzenie grafiki 3D w android

PRZYKŁAD - RUCH KAMERY

Page 48: Tworzenie grafiki 3D w android
Page 49: Tworzenie grafiki 3D w android

PRZYKŁAD - RUCH KAMERY

Page 50: Tworzenie grafiki 3D w android
Page 51: Tworzenie grafiki 3D w android

CZEGO TA PREZENTACJA NIE OGARNIA?użycie teksturanimacjaskomplikowane shadery

Page 52: Tworzenie grafiki 3D w android

OSTREŻENIENIE PRÓBUJCIE TEGO W DOMU!

UŻYCIE BIBLIOTEK JEST PRZYCZYNĄ DŁUGOWIECZNOŚCI

Page 53: Tworzenie grafiki 3D w android

DZIĘKUJĘ ZA UWAGĘ!Tu jest kod