Vývoj her pro Android profesionálně

Page 1

E N C Y K L O P E D I E

Z O N E R

P R E S S

VÝVOJ HER

pro Android

profesionálně

Vladimir Silva



Vývoj her pro Android profesionálně

Vladimir Silva


Advanced Android 4 Games Vladimir Silva Original edition copyright © 2012 by Vladimir Silva. Czech edition copyright © 2013 by ZONER software, a.s. All rights reserved. No part of this work may be reproduced or transmitted in any form or by any means, electronic or mechanical, including photocopying, recording, or by any information storage or retrieval system, without the prior written permission of the copyright the publisher. Copyright originálního vydání © 2012 Vladimir Silva. Copyright českého vydání © 2013 ZONER software, a.s. Všechna práva vyhrazena. Žádná část této publikace nesmí být reprodukována nebo předávána žádnou formou nebo způsobem, elektronicky ani mechanicky, včetně fotokopií, natáčení ani žádnými jinými systémy pro ukládání bez výslovného svolení držitele autorských práv.

Vývoj her pro Android – profesionálně Autor: Vladimir Silva Copyright © ZONER software, a.s. Vydání první, v roce 2013. Všechna práva vyhrazena. Zoner Press Katalogové číslo: ZRK1214 ZONER software, a.s. Nové sady 18, 602 00 Brno Překlad: RNDr. Jan Pokorný Odpovědný redaktor: Miroslav Kučera Šéfredaktor: Ing. Pavel Kristián DTP: Miroslav Kučera Obálka: Dan Zůda Zdrojové soubory ke stažení: http://zonerpress.cz/download/zrk1214-android.zip

Informace, které jsou v této knize zveřejněny, mohou byt chráněny jako patent. Jména produktů byla uvedena bez záruky jejich volného použití. Při tvorbě textů a vyobrazení bylo sice postupováno s maximální péčí, ale přesto nelze zcela vyloučit možnost výskytu chyb. Vydavatelé a autoři nepřebírají právní odpovědnost ani žádnou jinou záruku za použití chybných údajů a z toho vyplývajících důsledků. Všechna práva vyhrazena. Žádná část této publikace nesmí být reprodukována ani distribuována žádným způsobem ani prostředkem, ani reprodukována v databázi či na jiném záznamovém prostředku či v jiném systému bez výslovného svolení vydavatele, s výjimkou zveřejnění krátkých částí textu pro potřeby recenzí. Veškeré dotazy týkající se distribuce směřujte na: Zoner Press ZONER software, a.s Nové sady 18, 602 00 Brno tel.: 532 190 883 e-mail: knihy@zoner.cz www.zonerpress.cz

ISBN 978-80-7413-255-1


Všem vývojářům pro Android – budoucnost této platformy je ve vašich rukou


O autorovi Vladimir Silva se narodil v hlavním městě Ekvádoru, v Quitu. V roce 1994 absolvoval ekvádorský Army Polytechnic Institute jako systémový analytik. Téhož roku přešel do Spojených států jako výměnný student, aby vystudoval informatiku na Middle Tennessee State University. Po promoci se zapojil do technologického think tanku WebAhead společnosti IBM. Mezi jeho zájmy patří grid computing (distribuované řešení složitých matematických, fyzikálních a jiných přírodovědných problémů), neuronové sítě a umělá inteligence. Je také držitelem četných certifikátů v oboru informačních technologií, mezi něž patří Oracle Certified Professional (OCP), Microsoft Certified Solution Developer (MCSD) a Microsoft Certified Professional (MCP). Napsal mnoho odborných článků týkajících se bezpečnosti a grid computing pro IBM developerWorks.

O odborných korektorech Vikram Goyal je autorem několika knih z vydavatelství Apress a z domova pracuje na několika webech. V současné době žije v Brisbane v Austrálii. James Graham se narodil v Alabamě a vyrostl ve Fort Walton Beach na Floridě a v San Antoniu v Texasu. V roce 1988 získal BS v oboru elektronika se specializací telekomunikace na Texas A&M University. Pracoval jako spolupracující síťový inženýr pro skupinu Network Design ve společnosti Amoco a jako systémový analytik v oblasti umělé inteligence pro US Air Force Special Operations Command. Kromě toho, že je vývojářem Androidu, je také autorem vysoce hodnoceného programu JStrack pro sledování hurikánů.

Poděkování Rádi bychom poděkovali všem lidem z vydavatelství Apress. Bez jejich pomoci by tato kniha nevznikla.


5

Stručný obsah Kapitola 1 Vítejte ve světě malého zeleného robota

19

Kapitola 2 Herní triky pro telefony a tablety

31

Kapitola 3 Další herní triky s OpenGL a JNI

71

Kapitola 4 Grafika s OpenGL ES 2.0

123

Kapitola 5 3D engine Doom

157

Kapitola 6 3D engine Quake

207

Kapitola 7 3D engine Quake II

249

Dodatek A Tipy k nasazování aplikací a ke kompilaci

277

Rejstřík

285


6

Obsah O autorovi

4

O odborných korektorech

4

Poděkování

4

Úvod

10

Zelený robot se začíná prosazovat

10

Komu je kniha určena?

11

Požadované dovednosti, abyste z knihy vytěžili maximum

11

Jaký hardware a software budete potřebovat?

13

Čím je tato kniha jedinečná?

15

Co naleznete v jednotlivých kapitolách?

16

Kapitola 1

Vítejte ve světě malého zeleného robota

Příprava stroje

19 19

Stažení a instalace Android SDK

20

Konfigurace Eclipse

20

Instalace Android NDK (Native Development Kit)

24

Instalace NDK

24

Instalace Cygwin

24

Vytvoření emulátoru Androidu Vytvoření AVD

25 25

Konfigurace opravdového zařízení

28

Shrnutí

28

Kapitola 2

Herní triky pro telefony a tablety

Kompilace nativního kódu v Androidu

31 31

Vytvoření projektu Androidu s nativní podporou

33

Architektura aplikace

34

Kompilace sdílené knihovny

45

Otestování aplikace na zařízení

46

Obaly Javy pro obsluhu událostí C/C++

48

Nezávislá obsluha audia

48

Kaskádování událostí videa

54

Multitouch Třída MultiTouchGesture

59 59


7 Třída MultiTouchScreen

61

Třída TestActivity

63

Zeemote – ovladač s Bluetooth

65

Shrnutí

69

Kapitola 3

Další herní triky s OpenGL a JNI

71

Síla mobilních zařízení

72

OpenGL s Javou

73

Vytvoření projektu

73

Hlavní aktivita Javy

76

Zobrazení povrchu

78

Třída GLThread

82

Renderer krychlí

85

Třída Cube

89

OpenGL nativně

92

Hlavní aktivita

93

Třída nativního rozhraní

95

Změny v původním příkladu

96

Nativní renderer krychlí

98

Nativní krychle

104

Kompilace a spuštění příkladu

106

Scaling bufferů videa s hybridním OpenGL ES

109

Proč používat hybridní scaling?

110

Inicializace povrchu

112

Kreslení do textury

114

Co se stane, když obrázek není mocnina dvou

116

Shrnutí

Kapitola 4

122

Grafika s OpenGL ES 2.0

OpenGL ES 2.0 a Android Shadery

123 123 124

GLSL

124

Anatomie shaderu

126

Vyvolání OpenGL ES 2.0 v Androidu Projekt dvacetistěnu Seznámení s cílovým obrazcem

130 130 130


8 Zahájení prací na projektu

132

Nativní dvacetistěn

142

Využití více současných dotyků pro změnu rychlosti rotace a zoom

149

Kompilace a spuštění

154

Shrnutí

155

Kapitola 5

3D engine Doom

157

Neomezené možnosti mocné dvojky Java/C

158

Přenos hry Doom na mobilní zařízení

159

Architektura hry pro Doom

161

Hlavní aktivita v Javě

163

Obsluha vytvoření

163

Layout hry

164

Menu a obsluhy výběru z menu

166

Obsluha klávesových a dotykových událostí

168

Obsluhy nativního zpětného volání

170

Navigační ovládací prvky

174

Obsluha audia nezávisle na formátu

177

Třída nativního rozhraní

177

Naslouchač zpětného volání

177

Nativní metody

178

Zpětná volání C do Javy

179

Nativní vrstva

182

Implementace nativních metod

182

Změny v původní hře

194

Kompilace Doom s NDK

201

Otestování hry Doom v emulátoru

203

Shrnutí

206

Kapitola 6

3D engine Quake

Terminologie Quake Síla opětovného využití kódu: Quake s méně než 500 řádky nového kódu

207 207 208

OpenGL není totéž co OpenGL ES

208

Softwarový renderer – je to možné řešení?

210

NanoGL: náš zachránce

210

Architektura Quake pro Android

216


9 Architektura OpenGL rendereru Javy

217

Obsluha audia nezávisle na formátu

222

Obsluha klávesových událostí

225

Startovací aktivita hry

230

Požadované změny v nativním enginu Quake

232

Změny v obsluze videa

232

Zpracování pitch a yaw

234

Obsluha pohybu vpřed a do stran

235

Změny v obsluze audia

236

Oprava herního cyklu

238

Spuštění hry na zařízení

241

Shrnutí

248

Kapitola 7

3D engine Quake II

Prohlídka kódu

249 249

Únik z pout haldy Javy

250

Ochočení mocného enginu Quake II

251

Opětovná využitelnost kódu

251

Co dělat, když dojde k fatální chybě

261

Záležitosti týkající se okamžitého módu OpenGL

264

Obsluhy videa

264

Sestavení Quake II s NDK

269

Spuštění na zařízení nebo v emulátoru

272

Výkon Quake II na několika zařízeních

275

Shrnutí

276

Dodatek A

Tipy k nasazování aplikací a ke kompilaci

Podepsání aplikace

277 277

Vytvoření depozitáře Javy pro klíče

278

Podepsání aplikace

278

Užitečné tipy pro JNI

281

Zavolání Javy z C (zpětná volání)

282

Závěrečné zamyšlení

283

Rejstřík

285


10

Úvod Vítejte v knize Vývoj her pro Android. Pomůže vám vytvářet skvělé hry pro platformu Android. Ano, existuje spousta knih, které se potýkají s touto problematikou, ale pouze tato kniha vám poskytne jedinečný vhled do toho, jak snadno se na tuto platformu přenesou s minimálním úsilím nativní PC hry. Kniha toho v každé z kapitol dociluje prostřednictvím příkladů ze skutečného světa a zdrojového kódu. Než se ale začnete do hloubky zabývat tématy knihy, mějte na paměti, že potřebujete mít solidní základy v Javě a v ANSI C. Snažil jsem se jasně a jednoduše vysvětlovat nejkomplikovanější pojmy kombinací ilustračních obrázků a ukázkového kódu. Zdrojový kód poskytovaný ke každé kapitole by měl pomoci tyto pojmy do detailu pochopit a efektivně je využívat na pozici vývojáře her pro mobilní zařízení.

Zelený robot se začíná prosazovat Je až k neuvěření, že Android, který se se objevil na scéně chytrých telefonů před několika málo lety (2008), a že už se tak vehementně prosazuje. Podívejte se na obrázek 1, kde je na základě průzkumu trhu společnosti Nielsen zobrazen koláčový graf trhu s chytrými telefony v USA (zdroj: hhttp://www.nielsen.com/us/ en/newswire/2012/two-thirds-of-new-mobile-buyers-now-opting-for-smartphones.html). V červnu 2012, Android ovládl přes 51 procent trhu s chytrými telefony ve Spojených státech – to není vůbec špatné na operační systém starý jen pár let.

Obrázek 1. Podíly na trhu s chytrými telefony, červen 2012, Nielsen. A čísla jsou čím dál lepší. Například ke konci roku 2012 dohnal Google Play konkurenční AppStore od Apple v počtu aplikací. V polovině roku 2013 Google dále ohlásil, že každý den je aktivováno 1,5 miliónů zařízení s Androidem a že z Google Play už bylo staženo přes 50 miliard aplikací (pro srovnání: platforma iOS dosáhla tohoto počtu o dva měsíce dříve – pozn. red.). Není pochyb o tom, že vývojářům, kteří se neustále pídí po nějakém způsobu, jakým by mohli vydělat na raketovém růstu segmentu chytrých telefonů, se otevírají zcela nové obzory. A kniha Vývoj her pro Android je přesně to, co potřebujete, abyste se co nejrychleji dostali na špici budování her pro tuto platformu.


11

Komu je kniha určena? Kniha je zacílena především na příležitostné vývojáře her, nikoliv pouze v Javě, ale také v C, protože při vývoji her je kritickým faktorem výkon. O knihu však mohou mít zájem i jiní: Vývojáři z oblasti aplikací pro byznys. Pracujete-li na nativních aplikacích, může vám kniha poslou-

žit jako cenný informační nástroj. Vývojáři vědeckých aplikací. Ve světě vědy také záleží na výkonu. K dosažení vašich cílů vám mohou

pomoci kapitoly o JNI a OpenGL. Studenti informatiky, kteří se rádi seznamují s novými mobilními platformami. Protože Android

je otevřená a dobře přenositelná platforma, může být tato kniha užitečná i studentům bez ohledu na to, s jakou platformou právě pracují. Kdokoli, koho zajímá vývoj v Androidu. Android zabral značný prostor na mobilním trhu s nevída-

nou rychlostí. Je proto žádoucí, abyste rozšířili svou sadu dovedností o hry, abyste udrželi krok s dobou. Jak se říká, kdo chvíli stál, už stojí opodál.

Požadované dovednosti, abyste z knihy vytěžili maximum Mezi požadované dovednosti pro tuto knihu o Androidu patří C/C++ a Java, plus nějaké základy skriptování shellu Linuxu. Java poskytuje elegantní objektově orientovanou výbavu, ale pouze s jazykem C dodáte takový výkon a sílu, jakou si žádá vývoj her.

Solidní základy Androidu V knize se předpokládá, že už znáte základy vývoje pro Android. Například potřebujete vědět, co jsou aktivity (activities), zobrazení (views) a layouty. Pokud pouhým pohledem pochopíte, co dělá následující fragment kódu, můžete být v klidu, jste na tom dobře. public class MainActivity extends Activity { public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); } }

Tento fragment definuje hlavní aktivitu neboli třídu, která řídí aplikační cyklus. Metoda onCreate se volá pouze jednou, když aplikace startuje, přičemž má za úkol nastavit obsahový layout (neboli grafické uživatelské rozhraní pro aplikaci). Dále byste měli mít základní povědomí o tom, jak se vytváří grafické uživatelské rozhraní (GUI) prostřednictvím XML. Podívejte se na další fragment kódu. Umíte říci, co dělá? <?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent"


12 android:layout_height="fill_parent"> <ImageView android:id="@+id/doom_iv" android:layout_width="fill_parent" android:layout_height="fill_parent" android:background="@drawable/doom" android:focusableInTouchMode="true" android:focusable="true"/> <ImageButton android:id="@+id/btn_upleft" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentBottom="true" android:layout_alignParentLeft="true" android:src="@drawable/img1" /> </RelativeLayout>

Tento kód definuje relativní layout. V relativním layoutu se widgety umisťují relativně vzhledem k ostatním (někdy se překrývají). V tomto případě je zde obrázkové zobrazení (image view), které vyplní celou obrazovku. Toto obrázkové zobrazení zobrazí jako pozadí soubor s názvem doom.png, který je uložen ve složce res/drawable projektu, a bude přijímat klávesové a dotykové události. V levém dolním rohu obrazovky se zobrazí obrázkové tlačítko s ID btn_upleft, které překryje obrázkové zobrazení.

Potřebujete nějaký tutoriál Androidu? S vývojem pro Android je spojeno mnoho různých termínů a samozřejmě není v lidských silách si pamatovat veškeré detaily vztahující se k aktivitám, zobrazením a layoutům. Užitečným místem, kde je možné se rychle dobrat k požadovaným informacím, je tutoriál Androidu. Naleznete jej zde: http://developer.android.com/

Hlavní průvodce pro vývojáře Androidu – nejnovější vydání, stahy, SDK Quick Start, poznámky k verzím, nástroje pro nativní vývoj, a předchozí vydání – najdete na: http://developer.android.com/sdk/1.6_r1/index.html

V průběhu této knihy (zejména v kapitolách, které se týkají nativního kódu) velmi intenzívně využívám nástroje příkazového řádku Android Software Development Kit (SDK), hlavně pro úlohy, které má provádět systémový administrátor. Z tohoto důvodu byste měli dobře rozumět těmto nástrojům, zejména se jedná o Android Debug Bridge (adb). Měli byste vědět, jak: Vytvořit virtuální zařízení Androidu (Android Virtual Device, AVD). AVD zapouzdřuje nastavení pro

specifickou konfiguraci zařízení, jako je verze firmware a cesta k SD kartě. AVD se vytvoří opravdu jednoduše – lze to udělat například z integrovaného vývojového prostředí (IDE) pomocí AVD Managera (dostanete se k němu, když kliknete v toolbaru na ikonu černého telefonu). Vytvořit soubor SD karty. Některé z her probíraných v pozdějších kapitolách zahrnují větší soubory

(5 MB nebo i větší). Aby se ušetřilo místo, kód ukládá všechny soubory hry do zařízení s názvem SD karta a vy musíte vědět, jak se taková karta vytvoří. Chcete-li například ve svém domovském adresáři vytvořit 100 MB soubor SD karty s názvem sdcard.iso, vydejte tento příkaz: $ mksdcard 100M $HOME/sdcard.iso


13 Se připojit k emulátoru. Budete to potřebovat při různých administračních úlohách, jako například při

extrakci knihovny. Shell k zařízení otevřete tímto příkazem: $ adb shell Nahrávat soubory do emulátoru, a jak je dostat z něho ven. Tyto úlohy usnadňují ukládání souborů

hry na zařízení a extrakci těchto souborů ze zařízení. Používejte tyto příkazy: $ adb push <MÍSTNÍ_SOUBOR> <SOUBOR_ZAŘÍZENÍ> $ adb pull < SOUBOR_ZAŘÍZENÍ> < MÍSTNÍ_SOUBOR>

POZNÁMKA Přesvědčte se, zda máte adresář SDK_HOME/tools přidaný do systémové proměnné PATH, než se začnete pokoušet vydávat příkazy, jimiž se vytváří soubor SD karty, připojuje se k emulátoru a nahrávají se soubory do emulátoru (nebo z něho ven).

Základní znalosti o skriptování Linuxu a shellu V kapitolách, které se zabývají hybridními hrami, budete pracovat s linuxovou distribucí Ubuntu, takže oprašte všechny své zaváté staré dovednosti Unixu. Měli byste znát základní příkazy shellu (kam patří příkazy pro výpisy souborů, instalace komponent softwaru) a ovládat základní administraci systému. V této knize je pouze několik jednoduchých skriptů. Budou se vám také hodit základní znalosti bash shellu. TIP Pokud si potřebujete osvěžit své znalosti o Linuxu a o skriptování shellu, zkuste výukový kurz Ashley J.S Millse na adrese http://supportweb.cs.bham.ac.uk/documentation/tutorials/docsystem/build/tutorials/unixscripting/unixscripting.html.

Jaký hardware a software budete potřebovat? Abyste z knihy vytěžili maximum, budete potřebovat nástroje uvedené v této sekci.

PC s Windows nebo Linuxem a s řádně nainstalovaným Java SDK Domnívám se, že to je zřejmá věc, protože většina vývoje pro Android se dělá v Javě. Připomínám, že zmiňuji SDK, nikoli JRE. SDK se požaduje kvůli hlavičkovým souborům JNI a nástrojům příkazového řádku, které budete používat v pozdějších kapitolách.

Řádně nainstalované IDE Eclipse a SDK Androidu Eclipse je de facto IDE vývoje pro Android. Já jsem workspace pro tuto knihu vytvořil v Eclipse Galileo, nicméně stejně dobře by mělo fungovat i Eclipse Ganymede.


14 Potřebujete nějaké vývojové IDE? Přestože jsem workspace pro kód vytvořil s Eclipse Helios, můžete používat své oblíbené IDE. Samozřejmě si to vyžádá trochu přípravných prací navíc. Eclipse získáte z www.eclipse.org. Instrukce, jak nakonfigurovat Android SDK s jinými IDE (kam třeba patří IntelliJ), naleznete na adrese http:// developer.android.com/guide/developing/other-ide.html.

Abyste měli na svém stroji řádně nainstalovaný Android SDK, musíte udělat toto: 1. Nainstalovat zásuvné moduly Android SDK pro Eclipse: Z hlavního menu IDE zvolte Help -> Install New Software. Klikněte na tlačítko Add, abyste přidali nový web (Site), a napište:

Name: Android SDK Location: https://dl-ssl.google.com/android/eclipse/. Klikněte na OK. V dialogu Available Software vyberte Android SK a postupujte podle jednoduchých instalačních

pokynů průvodce. 2. Nainstalujte Android SDK. Můžete si ho stáhnout z webu developer.android.com. Mějte na paměti, že musíte informovat Eclipse, kde máte umístěný Android SDK. Z hlavního menu IDE zvolte Window -> Preferences. Na levé straně vyberte z navigační nabídky Android a zadejte umístění SDK (viz obrázek 2). Já jsem použil SDK 3.1, protože to byla nejnovější verze v době, kdy jsem psal tyto řádky. Kód v této knize však byl otestován s SDK 2.3 a 3.1 (podrobnosti viz sekce o kompatibilitě SDK).

Obrázek 2. Konfigurační dialog Android SDK v Eclipse Indigo.


15

Native Development Kit (NDK) NDK je důležitý nástroj pro každého seriózního vývojáře her. Poskytuje compiler chain, hlavičkové soubory nebo dokumentaci, kterou potřebujete, pokud se chcete se svými špičkovými hrami prosadit v mobilním světě. Když vývojáři používají NDK, mohou se vymanit z pout paměťové haldy Javy, pustit z řetězu svou kreativitu a budovat nejmocnější enginy C/C++, které budou limitovány jen tím, co jim dokáže nabídnout hardware. Protože v této knize budete intenzívně pracovat s NDK, jsou vyžadovány solidní programovací základy v C, abyste mohli plně pochopit pojmy a koncepce prezentované v jednotlivých kapitolách.

Zdrojový kód kapitol Ačkoliv nemusíte pracovat se zdrojovými kódy kapitol, nesmírně vám mohou pomoci pochopit probírané pojmy, jak budete postupovat stále kupředu. Snažil jsem se ze všech sil, aby můj výklad byl v každé kapitole co nejjednodušší, nicméně některé z her (zejména Wolf 3D a Doom) mají velmi rozsáhlé enginy, které jsou napsané v C (100 tisíc řádků pro Doom), které jsou špatně okomentované a poměrně obtížně se chápou. Souhrnně lze ale říci, že uvidíte, jak snadno a s minimálním úsilím lze zkombinovat dva skvělé programovací jazyky (Java a C). Zdrojový kód k této knize si můžete stáhnout odsud: http://zonerpress.cz/download/zrk1214-android.zip

Čím je tato kniha jedinečná? Domnívám se, že je pro čtenáře důležité, aby věděl, jakých cílů jsem chtěl s tímto rukopisem dosáhnout a o čem si myslím, že tuto knihu vyčleňuje z davu. Přestože je Java primárním vývojářským jazykem pro Android, u Google usoudili, že je zapotřebí hybridní vývoj Java/C, pokud se má Android prosadit jako herní platforma – a to natolik, že dokonce vydali Native Development Kit (NDK). Myslím si, že rozhodnutí Google podporovat vývoj v C bylo moudré, protože jinak by hrozilo, že ztratí krok s dobou zaplavenou mnoha nativními hrami napsanými pro jiné mobilní platformy, jako je konkurenční iOS. Hry na PC máme už celá desetiletí (většinou jsou napsané v C), přičemž s pomocí jednoduchého kompilátoru ARM C máte potenciál přinést na platformu Androidu tisíce her provozovaných na PC. A právě tohle je na této knize jedinečné. Proč překládat 100 tisíc řádků příšerně komplikovaného kódu z C do Javy, když můžete jednoduše a elegantně zkombinovat oba jazyky a ušetřit tím spoustu času a peněz? Ano – přesně tohle je mým cílem a tím tato kniha vyniká. Nicméně, abych uspokojil obě skupiny vývojářů (jak příznivce Javy, tak i milovníky C), zařadil jsem do knihy části, kde se věnuji hrám napsaným v Javě.

Co se změnilo od posledního vydání? Vzhledem k vytrvalým aktualizacím Androidu se od posledního vydání této knihy, se pochopitelně několik věcí změnilo. Do těchto změn patří: Aktualizace na nejnovější verze SDK Androidu, Native Development Kit (NKD) a IDE Eclipse. Větší soustředění na tablety. Lidé dychtí po větších obrazovkách a vyšších rozlišeních. Tablety dospíva-

jí, přátelé, a my musíme počítat se stále se měnícími rozlišeními zařízení a specifikacemi hardwaru. Větší soustředění na nativní stranu. Myslím si, že je férové říci, že Java poněkud ztratila na oblibě

u vývojářů 3D her, zejména u těch nejvyspělejších. Hlavními viníky této skutečnosti jsou paměťová omezení Javy a nedostatečný výkon. Proto kniha, kterou držíte v ruce, klade větší důraz na nativní vývoj her a hardwarově akcelerovanou grafiku.


16 Větší a lepší enginy ze skutečného světa. Mým cílem není prostě nabídnout jen pár triků použitelných

při vývoji her, ale poskytnout příklady opravdových, mocných her z jiného světa, než je ten náš. Tato kniha vám ukáže, jak můžete mocné herní enginy, které byly navrženy pro použití na PC (jako jsou Quake I a II), přenést na své mobilní zařízení, a to prakticky bez jakýchkoli změn. Do knihy jsem také zařadil hru Doom z předchozího vydání. Je to sice starší, nicméně stále oblíbený engine.

Kompatibilita SDK Androidu Jakožto vývojáři se asi sami sebe ptáte, jak je to s kompatibilitou kódu v této knize. Je to důležitá otázka, protože nové verze SDK Androidu přicházejí poměrně často. V době, kdy jsem psal tyto řádky, vydal Google Android SDK verze 3.2. Kód v této knize byl plně otestován s SDK Androidu verzí 4.0 a 3.1. Z toho plyne závěr, že kód v této knize poběží v jakékoli verzi SDK, což bylo také jedním z mých záměrů.

Co naleznete v jednotlivých kapitolách? Kapitola 1 Tato kapitola je prvním krokem v přípravě systému pro kompilaci hybridní hry, včetně získání zdroje Androidu, extrakce systémových knihoven zařízení, přípravě vlastního kompilačního nástroje a vlastních kompilačních skriptů. Zahrnuje také informace o přípravě IDE Eclipse pro potřeby zbývajících částí knihy.

Kapitola 2 V kapitole 2 se dozvíte, jak se elegantně zkombinuje kód Javy a C tím, že nad jistou nativní knihovnou vybudujete jednoduchou aplikaci Javy. Dozvíte se o vzrušujících konceptech z nativního rozhraní Javy (Java Native Interface, JNI) a o API, s nímž zkombinujete Javu a C do jediné jednotky. Naučíte se také načítat nativní knihovny, pracovat s klíčovým slovem native a generovat hlavičkové soubory JNI. Zvládnete rovněž taková témata, jako jsou signatury metod, pole Java versus pole C, volání metod Javy, kompilaci a zabalení produktu, a mnoho dalšího.

Kapitola 3 Tato kapitola se zabývá 3D grafikou s OpenGL. Prezentuje zajímavý postup, který umožňuje mixovat dohromady volání API OpenGL v Javě i v C. Toto pojetí se ilustruje na vzorovém příkladu artistických 3D krychlí, který poskytuje Google, abychom předvedli OpenGL ve dvou režimech, režim čisté Javy (pure Java) a hybridní režim. Tento postup otevírá vývojářům nové obzory 3D vývoje pro Android, s potenciálem přenést na tuto platformu spoustu 3D her původně určených pro PC, a to s enormními úsporami času a nákladů na vývoj.

Kapitola 4 V kapitole 4 se popereme s problematikou efektivní práce s grafikou v OpenGL ES 2.0. Kapitola začíná stručným popisem nejdůležitějších schopností, které OpenGL ES 2 nabízí. Patří sem například shadery a jazyk GLSL. Dozvíte se, jak ovlivňují platformu Android. Pak se důkladněji podíváme na GLSL tím, že vytvoříme projekt Androidu, v němž budeme pomocí OpenGL ES 2.0 renderovat dvacetistěn. Jako bonus vám ukážu, jak můžete pomocí funkcionality dotyků a multidotyků měnit rychlost rotace dvacetistěnu. Také si předvedeme, jak přibližovat a oddalovat obraz (zoom in/out) pomocí gesta pinch.


17

Kapitola 5 V kapitole 5 přejdeme o úroveň výš s Doom, legendární hrou pro PC. Doom je pravděpodobně nejskvělejší 3D hra, jaká byla kdy vytvořena, otevřela v 3D grafice nové obzory. Hlavním cílem této kapitoly není popisovat samotnou hru, ale ukázat, jak snadno se přenese nějaká složitá hra pro PC, jako je třeba Doom, na platformu Android. Důkaz? Doom má více než 100 tisíc řádků kódu v C – a do Androidu ji dostanete s méně než 200 řádky volání API JNI navíc, plus s kódem Javy požadovaným pro vybudování mobilního uživatelského rozhraní. Tato kapitola vám ukáže, že nemusíte překládat 100 tisíc řádků C do Javy, ale prostě oddáte tyto dva mocné jazyky do elegantní manželské aplikace. Uvažte, jak velké mohou být potenciální úspory z hlediska času a nákladů na vývoj! Tuto kapitolu si nutně musíte přečíst.

Kapitola 6 Zde začnou být věci opravdu vzrušující. Kapitola 6 přináší klenot 3D stříleček – hru Quake. Dozvíte se, jak je možné s minimálním úsilím přenést mocný engine tohoto kalibru na platformu Android. A to natolik snadno, že 95 procent původního kódu C zůstane netknutých, navíc přidáte jen 500 až 1000 řádků nového, velmi jednoduchého obalového kódu Javy. Začněte hned teď hrát Quake s plnou parádou na svém chytrém telefonu!

Kapitola 7 Tato kapitola staví na kapitole 6, abyste mohli pracovat s enginem hry Quake II. Uvede vás do báječného nástroje zvaného NanoGL, který vývojářům umožňuje překládat složitosti vykreslování v okamžitém módu OpenGL do OpenGL ES, přičemž transparentně udržíte původní kód netknutý. Dozvíte se také, jak zařídit, aby se engine Quake II choval v Androidu řádně, což docílíte tím, že vytvoříte vlastní obsluhy audia a videa, přičemž zároveň předvedeme skvělé schopnosti jazyka Java co do opětovné využitelnosti kódu. Když to shrneme, 99 procent původního kódu C Quake II zůstane netknutých, přibudou tenké obaly Javy z kapitoly 6, které zde opětovně využijeme bez jakýchkoli změn. Sedmá kapitola ukáže, jak jednoduchou kombinací velmi mocných nástrojů zkrotíte a zapřáhnete do svých služeb mohutný renderer Quake II OpenGL. Ověřte si to!


18


123

KAPITOLA 4 Grafika s OpenGL ES 2.0 V předchozí kapitole jste viděli, co může nabídnout OpenGL 1.0. Toto API ale nabízí mnohem více. V této kapitole se podíváme na špici grafického vývoje: na OpenGL ES 2.0, což je podmnožina OpenGL. Začneme stručným popisem nejdůležitějších schopností, které OpenGL ES 2.0 nabízí, mj. shadery a GLSL. Také si řekneme, jaký mají dopad na platformu Android. Pak se důkladněji podíváme na OpenGL ES Shading Language (GLSL) tím, že vytvoříme projekt Androidu pro renderování geometrického obrazce – dvacetistěnu – pomocí OpenGL ES 2.0. Dejme se do toho.

OpenGL ES 2.0 a Android OpenGL ES 2.0 je sada vylepšení pro OpenGL ES 1.0. Klade důraz na programovatelnost trubice 3D grafiky (3D graphics pipeline) a současně na výbavu pro tvorbu shaderů a programových objektů a pro psaní vertexových a fragmentových shaderů v GLSL. OpenGL ES 2.0 poskytuje pro grafické programování následující funkcionalitu: Širší rozsah voleb přesnosti pro použití v zabudovaných (embedded) zařízeních

(pomocí speciálního jazyka podobajícího se desktopovému OpenGL 2.0). Architekturu FBO (Frame Buffer Objects), která zjednodušuje správu povrchu

a nabízí podmnožinu funkcionality z desktopového FBO. Stoprocentní zpětnou kompatibilitu s OpenGL ES 1.x. Je také vybudován v sou-

ladu s nejnovějšími standardy a s nejpokročilejšími ideami, které se vztahují k oblasti grafického vývoje. Platforma Android plně implementuje specifikaci OpenGL ES 2.0. Musíte však uvážit následující úskalí, než při budování svých her začnete tuto technologii používat: OpenGL ES 2.0 se nepodporuje ve všech verzích Androidu. Z toho plyne, že po-

kud se chcete zacílit na co možná nejširší paletu zařízení, měli byste se spokojit s OpenGL ES 1.x. OpenGL ES 2.0 implementuje ty nejbrilantnější nápady a technologie grafické-

ho renderování. Toto ovšem nemusí za všech okolností znamenat, že kód bude lepší nebo poběží rychleji.


124

Kapitola 4 – Grafika s OpenGL ES 2.0

I přes tyto věci OpenGL ES 2.0 poskytuje žádané charakteristiky. Byl například navržen tak, aby snižoval odběr proudu v zabudovaných (embedded) systémech, jako jsou telefony, čímž snižuje úhrnné požadavky vaší hry na napájení, nebo poskytoval efektivnější grafické renderování. Když to shrneme, mít solidní vědomosti o OpenGL ES 2.0 vám rozhodně neuškodí. Představte si, že jste grafický vývojář, který hledá místo v této branži. Úplně první otázka, kterou vám při pohovoru typicky položí, bude, co víte o shaderech a GLSL.

Shadery Shader je jednoduchý program popisující charakteristiky vrcholu (vertex) nebo pixelu. Na nízké úrovni shader definuje sadu softwarových instrukcí, které se použijí k výpočtu renderovacích efektů s vysokým stupněm flexibility. Shadery byly vytvořeny proto, aby nahradily tradiční desktopovou OpenGL pipeline s fixní funkcí (OpenGL fixed-function pipeline), která umožňovala jen běžné geometrické transformace. Oproti tradiční desktopové OpenGL trubici mají tyto přednosti: Pro renderování lze aplikovat přizpůsobitelné efekty. Vyšší stupeň flexibility. Jednoduchost a vyšší stupeň opětovné využitelnosti.

V OpenGL ES 2.0 jsou implementované tři základní typy shaderů: vertexový shader (vertex shader), fragmentový shader (fragment shader) a shader geometrie (geometry shader).

Vertexové shadery Vertexové shadery se spouštějí jednou pro každý vrchol zadaný do GPU a transformují 3D pozici ve virtuálním prostoru na 2D souřadnice pro potřeby renderování na obrazovce. Mohou manipulovat s různými vlastnostmi, jako jsou například pozice, barva a souřadnice textury, nemohou však vytvářet nové vrcholy.

Fragmentové shadery Fragmentové shadery (také se jim říká pixelové shadery) vypočítávají barvu jednotlivých pixelů. Typicky se používají k osvětlování scény a podobným efektům, jako jsou mapování nerovností (bump mapping; technika texturování, která vytváří iluzi nerovnosti povrchu bez změny jeho geometrie) a tónování barev. Často se volají mnohokrát na pixel pro každý objekt nacházející se v odpovídajícím prostoru.

Shadery geometrie Shadery geometrie mohou do sítě (mesh) předávat vrcholy nebo je z ní odstraňovat. Používají se ke generování geometrie nebo pro přidání volumetrického detailu k existujícím sítím, který by byl příliš nákladný, pokud by se zpracovávál prostřednictvím CPU.

GLSL GLSL je akronym pro OpenGL ES 2.0 Shading Language. Je to jazyk pro programování vertexových a fragmentových shaderů, který byl adaptován pro zabudované (embedded) systémy. Jeho účelem je spolupracovat s OpenGL ES 1.1 tak, aby se minimalizoval odběr proudu v zabudovaných zařízeních, jako jsou například chytré telefony.


Vývoj her pro Android – profesionálně

125

Na implementační úrovni tvoří GLSL dva velmi provázané jazyky: jazyk vertexového shaderu (vertex shader) a jazyk fragmentového shaderu (fragment shader).

Jazyk vertexového shaderu (VSL) Ve své nejjednodušší podobě je VSL (Vertex Shader Language) program ve stylu C určený k manipulaci s atributy vrcholu (vertexu). Následující fragment definuje velmi jednoduchý vertexový shader, aby se nastavila renderovací pozice na pozici aktuálního vrcholu. void main(void) { // Tohle je komentář ve stylu C++ /* Tohle je komentář ve stylu C */ gl_Position = gl_Vertex; }

Jak je vidět, shader používá syntaxi ve stylu C s hlavní funkcí, ve které prostě deklarujete instrukce GLSL. V tomto případě jsme použili dvě zabudované proměnné: gl_Position. Nastaví pozici vrcholu, který se má renderovat. gl_Vertex. Obsahuje pozici aktuálně zpracovávaného vrcholu.

Jazyk fragmentového shaderu (FSL) FSL (Fragment Shader Language) se používá ke změně atributů barvy (RGBA) aktuálního pixelu. Následující fragment například nastaví barvu aktuálního pixelu na červenou RGBA (1, 0, 0, 0). void main(void) { gl_FragColor = vec4(1.0, 0.0, 0.0, 0.0); } gl_FragColor je zabudovaná proměnná, se kterou se nastavuje barva aktuálního pixelu. Podobně jako kaž-

dý programovací jazyk, i GLSL poskytuje všechno, co očekáváte od počítačového jazyka, tedy:  Proměnné a funkce. Všechny proměnné a funkce se musejí deklarovat dřív, než se použijí.  Bázové typy. Patří sem void, bool, int, float, vec2 (dvousložkový vektor v pohyblivé čárce), boo-

lean a další.  Obor deklarace. Určuje, kde je deklarace viditelná. Zahrnuje globální a lokální proměnné, jmenné

prostory plus možnost opětovné deklarace v rámci téhož oboru.  Kvalifikátory úložiště. Jedná se o kvalifikátory specifikované před typem v čistě tradičním stylu C.

Zahrnují lokální proměnné a konstanty. Jako nové v GLSL máme:  attribute. Definuje propojení mezi vertexovým shaderem a OpenGL ES pro data na úrovni jed-

notlivých vrcholů.  uniform. Říká, že se hodnota nemění v rámci právě zpracovávaného atomického geometrického

objektu (tzv. "primitive"). Formuje vazbu mezi shaderem, OpenGL ES a aplikací.


126

Kapitola 4 – Grafika s OpenGL ES 2.0 varying. Definuje vazbu mezi vertexovým shaderem a fragmentovým shaderem pro interpolova-

ná data.  Kvalifikátory parametrů. Jedná se o kvalifikátory předávané argumentům funkce, zahrnují: in. Parametr se předává do funkce. out. Parametr se předává zpět z funkce, ale neinicializuje se. inout. Parametr se předává do funkce i z funkce.  Kvalifikátory přesnosti. Pro přesnost pohyblivé řádové čárky. Zahrnují: highp, mediump a lowp pro

vysokou, střední a nízkou přesnost.  Variance a invariantní kvalifikátor. Používají se při obsluze možnosti získávat v různých shaderech

ze stejného výrazu různé hodnoty. Je možné (v samostatných kompilacích), že dva identické shadery nebudou přesně stejné, když běží, a právě pro takové případy existují kvalifikátory (invariant a varying), které tomu mají zabránit, respektive to povolit.  Operátory a výrazy. Patří sem všechny běžné operátory a výrazy, jaké očekáváte v typickém progra-

movacím jazyku. Mnohé další mocné schopnosti. Mezi ně patří zabudovaný úhel, trigonometrie, exponenciální, mati-

cové a vektorové funkce, zabudované proměnné a další věci.

Potřebujete pomoci s GLSL? GLSL toho obsahuje opravdu mnoho. Nejlepším zdrojem informací o GLSL je patrně OpenGL Software Development Kit dostupný na www.opengl.org/sdk/docs/manglsl/. Další skvělý zdroj o syntaxi GLSL nabízí Khronos Group na www.khronos.org/files/opengles_shading_language.pdf. Tyto weby vám pomohou dozvědět se víc o schopnostech a syntaxi GLSL. Doporučujeme je prostudovat.

Teď se podíváme, jak se implementuje takový shader a jak se používá v androidovém programu.

Anatomie shaderu Anatomie shaderu je definovaná těmito kroky: 1. Vytvoření programu. Úplně prvním krokem je vytvořit program shaderu, který poběží v hlavním programu – něco jako program v programu, chcete-li. 2. Načtení shaderu. Jakmile shader vytvoříte, musíte ho načíst z řetězcové proměnné nebo ze souboru. 3. Připojení shaderu. Pak musíte shader připojit k hlavnímu programu. 4. Linkování. Tímto krokem kód shaderu zkompilujete a zkontrolujete syntaktické chyby. 5. Nepovinná validace. Vždy je dobrý nápad validovat stav a patřičně obsloužit případné chyby. 6. Zapnutí a používání. Nakonec ho zapnete a aplikujete na sadu vrcholů.

Vytvoření programu shaderu Objekt nebo program shaderu vytvoříme pomocí API volání glCreateShader. Jako parametr přebírá tento typ shaderu: buď GL_VERTEX_SHADER nebo GL_FRAGMENT_SHADER pro vertexový, respektive fragmentový.


Vývoj her pro Android – profesionálně

127

glCreateShader vrací nenulovou hodnotu, se kterou se na něj můžete odkazovat. Následující fragment

kódu vytvoří dva shadery, načte vertexový a fragmentový shader a vykreslí s nimi dvacetistěn (což se popisuje v této kapitole později). int Shader[2] // Vytvoří dva programy shaderů Shader[0] = glCreateShader(GL_VERTEX_SHADER); Shader[1] = glCreateShader(GL_FRAGMENT_SHADER); // Načte vertexový shader: má kód GLSL LoadShader((char *)VertexShader, Shader[0]); // Načte fragmentový shader: FragmentShaderBlue má kód GLSL LoadShader((char *)FragmentShaderBlue, Shader[1]); // Vytvoří program a připojí shadery a atributy int Program = glCreateProgram();

Zařadili jsme také API volání glCreateProgram, které vytvoří prázdný programový objekt a vrátí nenulovou hodnotu, s jejíž pomocí se na něj můžeme odkazovat. Shadery musejí být připojeny k nějakému programu. Toto poskytuje mechanismus ke specifikaci objektů shaderu, které se budou spojovat při vytváření programu. Povšimněte si, že také poskytuje prostředky pro kontrolu kompatibility shaderů, které se použijí k vytvoření programu. Jako další krok načteme shader.

Načtení shaderu V objektu shaderu se udržují řetězce zdrojového kódu definující shader. Pro tento účel můžeme vytvořit načítací funkci, která bude vyvolávat glShaderSource a glCompileShader. glShaderSource jako argumenty převezme ID shaderu, počet prvků, řetězec obsahující zdrojový kód, který se má načíst, a pole délek řetězců (v tomto případě NULL). glCompileShader zkompiluje shader popsaný jeho referenčním ID. Následující fragment popisuje načítací funkci, kterou v nadcházejícím projektu použijeme při kreslení dvacetistěnu. // Jednoduchá funkce vytvářející shader void LoadShader(char *Code, int ID) { // Zkompiluje kód shaderu glShaderSource (ID, 1, (const char **)&Code, NULL); glCompileShader (ID); // Ověří, zda to prošlo int ShaderStatus; glGetShaderiv(ID, GL_COMPILE_STATUS, &ShaderStatus); // Zkontroluje stav kompilace if (ShaderStatus != GL_TRUE) {


128

Kapitola 4 – Grafika s OpenGL ES 2.0

printf("Error: Failed to compile GLSL program\n"); int Len = 1024; char Error[1024]; glGetShaderInfoLog(ID, 1024, &Len, Error); printf("%s\n", Error); exit (-1); } }

Jako bonus můžete také zkontrolovat stav kompilace API voláním glGetShaderiv. Jako argumenty přebírá ID shaderu, dotazovou konstantu (GL_COMPILE_STATUS; v tomto případě chceme zkontrolovat stav kompilace) a stav dotazu. Není-li stav GL_TRUE, dají se kompilační chyby extrahovat voláním glGetShaderInfoLog s ID shaderu a řetězcovým bufferem, který popisuje povahu chyby. Dalším krokem je připojit shader k nějakému programu.

Připojení shaderu Náš shader připojíme k hlavnímu programu API voláním glAttachShader. Jako argumenty přebírá ID programového objektu, k němuž shader připojujeme, a objekt shaderu, který chceme připojit, jak to ostatně předvádí následující fragment kódu: glAttachShader(Program, Shader[0]); glAttachShader(Program, Shader[1]); glBindAttribLocation(Program, 0, "Position"); glBindAttribLocation(Program, 1, "Normal");

Pomocí glBindAttribLocation sdružujeme uživatelsky definovanou atributovou proměnnou v programovém objektu s obecným indexem vertexového atributu. Název uživatelsky definované atributové proměnné se předá v posledním argumentu jako řetězec ukončený znakem null. To vývojáři umožňuje deklarovat v hlavním programu proměnné a vázat je k proměnným v kódu shaderu.

Linkování programu shaderu Abychom mohli shadery používat, musíme linkovat program, který je obsahuje. To zařídíme zavoláním glLinkProgram s referenčním ID programu. V zákulisí OpenGL dojde k vytvoření spustitelné jednotky, která poběží na programovatelném fragmentovém procesoru. // Linkování glLinkProgram(Program);

Získání stavu po linkování Stav linkovací operace (link operation) bude uložen jako část stavu programového objektu. Vždy je dobrý nápad zkontrolovat případné chyby tím, že pomocí glGetProgramiv získáme stav linkování. Je to velmi podobné způsobu, kterým jsme kontrolovali stav kompilace, ale v tomto konkrétním příkladu uvedeme konstantu GL_LINK_STATUS. Následující fragment kódu předvádí, jak se to udělá:


Vývoj her pro Android – profesionálně

129

// Validace naší dosavadní práce int ShaderStatus; glGetProgramiv(Program, GL_LINK_STATUS, &ShaderStatus); if (ShaderStatus != GL_TRUE) { printf("Error: Failed to link GLSL program\n"); int Len = 1024; char Error[1024]; glGetProgramInfoLog(Program, 1024, &Len, Error); printf("%s\n", Error); exit(-1); }

Nepovinné: validace a stav programu Programové objekty byste měli validovat vždycky. Pomáhá to zjistit, zda nemáte v kódu shaderu nějaké syntaktické chyby. Program validujete API voláním glValidateProgram s referenčním ID programu. Pak zavolejte glGetProgramiv s validační konstantou GL_VALIDATE_STATUS. Výsledek validace se vrátí v posledním argumentu (v tomto případě je to ShaderStatus). Pak jednoduše zkontrolujte stav a patřičně obslužte chybu, jak to vidíte v následujícím fragmentu kódu: glValidateProgram(Program); glGetProgramiv(Program, GL_VALIDATE_STATUS, &ShaderStatus); if (ShaderStatus != GL_TRUE) { printf("Error: Failed to validate GLSL program\n"); exit(-1); }

Nakonec shader zapněte a začněte používat.

Zapnutí a použití programu Abyste věci uvedli do chodu, zavoláte nejprve glUseProgram s ID programu, abyste nainstalovali programový objekt jako část aktuálního renderovacího stavu. Programový objekt bude obsahovat spustitelnou jednotku, která poběží na vertexovém procesoru, pokud obsahuje jeden nebo více objektů shaderu typu GL_VERTEX_SHADER, které byly úspěšně zkompilovány a linkovány. // Zapne program glUseProgram (Program); glEnableVertexAttribArray (0); glEnableVertexAttribArray (1);


Vladimir Silva

VÝVOJ HER

pro Android – profesionálně Naučte se vytvářet skvělé hry pro platformu Android.

ZONER software, a.s. významný producent softwaru v oblasti digitální fotografie, počítačové grafiky a multimédií, poskytovatel internetových služeb, souvisejících s prezentací na internetu a e-komercí, a nakladatelství odborné literatury.

Je až k neuvěření, jakého celkového rozmachu dosáhl Android od roku 2008, kdy se objevil úplně první chytrý telefon HTC Dream s tímto systémem. Jeho tvůrci pravděpodobně netušili, že o pouhých pět let později se bude počet zařízení s Androidem rozšiřovat tempem 1,5 milionů aktivací denně a že pro něj bude na Google Play k dispozici více než 700 tisíc různých aplikací (od jednoduchých utilit až po komplexní hry), které byly více než 50miliardkrát staženy. Není vůbec pochyb o tom, že velkému množství vývojářů se otevřely zcela nové obzory, a právě pro ně byla napsána tato kniha. Jak už její název napovídá, primárně se věnuje tvorbě her pro Android. Kniha vám pomůže pochopit nejenom nezbytné koncepty související s vývojem pro Android, ale také prohloubí vaše znalosti ohledně práce s 3D grafikou v OpenGL a OpenGL ES. A až budete mít tato témata, která zabírají první čtyři kapitoly, za sebou, lehce přejdete o úroveň výše a dozvíte se, jak s minimálním úsilím přenést na Android herní legendy ze světa desktopových počítačů – Doom, Quake a Quake II. Z obsahu knihy vybíráme: x Vítejte ve světě malého zeleného robota x Herní triky pro telefony a tablety x Další herní triky s OpenGL a JNI x Grafika s OpenGL ES 2.0

x x x x

3D engine Doom 3D engine Quake 3D engine Quake II Tipy k nasazování aplikací a ke kompilaci

Zdrojové kódy: zonerpress.cz/download/zrk1214-android.zip

novinky

Nechejte nám kontakt na novinky.zonerpress.cz a získáte další bonusy, slevy a jiné výhody.

www.zoner.cz © stockfreeimages.com (10075220)

slevy, akce,

E N C YK LO P E D I E ZO N E R P R E S S Pod tímto logem vycházejí publikace určené pro každého, kdo se zajímá o tvorbu webových stránek. Od ryze praktických příruček a průvodců až po komplexní publikace o všem, co potřebuje webdesignér při každodenní práci. Na vydavatelský plán a výhody, které můžete získat, se informujte na adrese vydavatelství.

DOPORUČENÁ CENA :

389 Kč

KATALOGOVÉ ČÍSLO: ZRK1214

Zoner Press

ISBN 978-80-7413-255-1

tel.: 532 190 883 e-mail: knihy@zoner.cz www.zonerpress.cz ZONER software, a.s., Nové sady 18, 602 00 Brno

9 7 8 8 0 74 13 2 5 51