smart developer Ein Code für alle (Vorschau)
Erfolgreiche ePaper selbst erstellen
Machen Sie aus Ihren PDF Publikationen ein blätterbares Flipbook mit unserer einzigartigen Google optimierten e-Paper Software.
Entwicklung<br />
Android und OpenGL<br />
Über die Autoren<br />
Shane Conder und Lauren Darcey<br />
haben zusammen mehrere<br />
erfolgreiche Lehrbücher zu Entwicklung<br />
mobiler Software verfasst,<br />
darunter Android Wireless<br />
Application Development und<br />
SAMS Teach Yourself Android<br />
Application Development in 24<br />
Hours. Sie erreichen die beiden<br />
per androidwirelessdev+sm@<br />
gmail. com oder über den Blog<br />
http:// androidbook. blogspot. com<br />
sowie auf Twitter unter http://<br />
twitter. com/ androidwireless.<br />
Infos<br />
[1] Quellcode zum Artikel:<br />
http:// code. google. com/ p/<br />
android‐opengl‐<strong>smart</strong><strong>developer</strong>/<br />
[2] Android Leitlinien zu<br />
3D-Entwicklung:<br />
http:// <strong>developer</strong>. android.<br />
com/ guide/ topics/ graphics/<br />
opengl. html<br />
[3] Wright, Richard S., Nicholas<br />
Haemel, Graham Sellers und<br />
Benjamin Lipchak: OpenGL<br />
SuperBibleAusgabe 5.; Addison-Wesley<br />
Professional,<br />
2010. ISBN-13: 978-<br />
0321712615<br />
[4] Munshi, Aaftab, Dan Ginsburg<br />
und Dave Shreiner.<br />
OpenGL(R) ES 2.0 Programming<br />
Guide. Addison-Wesley<br />
Professional, 2008.<br />
ISBN-13: 978-0321502797<br />
[5] Android-SDK Download:<br />
http:// <strong>developer</strong>. android.<br />
com/ sdk/ index. html<br />
[6] Android-NDK:<br />
http:// <strong>developer</strong>. android.<br />
com/ sdk/ ndk/ overview. html<br />
[7] Android Entwicklerblog:<br />
http:// android‐<strong>developer</strong>s.<br />
blogspot. com/ ? hl=en<br />
Java definieren, aber sie müssen in einem reservierten<br />
Bereich im Speicher aufbewahrt<br />
werden, damit die zugrunde liegende<br />
OpenGL-Implementierung diese genau und<br />
sicher nutzen kann. Um dies zu gewährleisten,<br />
verwenden Sie hier die Methode allocateDirect()<br />
der ByteBuffer-Klasse. Der <strong>Code</strong><br />
in Listing 5 nimmt zum Beispiel ein Array<br />
von Float-Werten und wandelt die Werte in<br />
einen OpenGL-fähigen Puffer um.<br />
Da diese Art von <strong>Code</strong> ziemlich gebräuchlich<br />
ist, erstellten wir Hilfsmethoden: die<br />
Datei OpenGLUtilities.java ist im Easy3D-<br />
Download enthalten. Die Verwendung ist<br />
ziemlich einfach und wird in Pseudocode in<br />
Listing 6 veranschaulicht.<br />
Mit diesen <strong>für</strong> die Grafik-Programmierung<br />
relativ einfachen Tools können Sie unter Verwendung<br />
von OpenGL auf Android nahezu<br />
<strong>alle</strong>s zeichnen, was Sie möchten. Allerdings<br />
sind Szenen oft mit Texturen verbessert: Ihre<br />
Konfiguration haben Sie bereits in Listing 2<br />
kennengelernt. Schauen Sie sich jetzt den<br />
Aufruf der setTexture()-Methode etwas<br />
gründlicher an.<br />
Android NDK<br />
In Verbindung mit OpenGL wird oft auch das<br />
Android-NDK (Native Development Kit) angesprochen.<br />
Das NDK [6] beinhaltet native C-APIs<br />
<strong>für</strong> OpenGL, wodurch Anwendungen von anderen<br />
Plattformen schneller portiert werden,<br />
wenn diese in C geschrieben sind. Im Allgemeinen<br />
wird aber das Android-NDK Ihre Arbeit<br />
in Sachen Performance nicht viel voranbringen,<br />
wenn Sie es lediglich <strong>für</strong> OpenGL-Aufrufe<br />
verwenden. Allerdings könnten einige Berechnungen<br />
und Algorithmen effizienter sein.<br />
Für 3D-Grafik ist die neue Alternative zu Android-NDK:<br />
Renderscript. Zum Zeitpunkt der<br />
Erscheinung dieses Artikels wissen wir noch<br />
ziemlich wenig von Renderscript, aber es ist<br />
<strong>für</strong> die Erstellung von 3D-Grafiken in Höchstqualität<br />
konzipiert, die mehrere Prozessorkerne<br />
und den Grafikprozessor sehr effizient nutzen.<br />
Um mehr Informationen über Renderscript zu<br />
erhalten, schauen Sie sich das Blog <strong>für</strong> Android-Entwickler<br />
[7] regelmäßig an.<br />
Laden von Texturen<br />
Es gibt viele Möglichkeiten, Texturen zu gestalten.<br />
<strong>Ein</strong>e sehr effiziente Methode <strong>für</strong> den<br />
Umgang mit Texturen sehen Sie in Listing 7<br />
(aus der EasyCube.java-Datei). Hier laden Sie<br />
eine herkömmliche Android-Bild-Ressource<br />
in OpenGL <strong>für</strong> den Gebrauch als Textur. Ähnlich<br />
wie bei den Puffern, müssen Sie auch<br />
die Textur-Koordinaten sehr genau konfigurieren.<br />
Die Texturen verbinden Sie wie gewohnt<br />
mit OpenGL und die Parameter konfigurieren<br />
Sie auch wie sonst üblich. Für Android<br />
nutzen Sie die texImage2D()-Methode<br />
der GLUtils-Klasse. Anschließend stellen Sie<br />
die Android-Bildobjekte mit dem Aufruf der<br />
recycle()-Methode von der Bitmap-Klasse<br />
sofort frei. Die Texturen sind nun sicher in<br />
der zugrunde liegenden OpenGL-Implementierung<br />
abgelegt.<br />
Nachdem Sie all diese <strong>Ein</strong>stellungen ordnungsgemäß<br />
durchführten, erstellen Sie nun<br />
leicht ähnliche Szenen wie in Abbildung 2<br />
dargestellt. In dieser Beispielszene sind <strong>alle</strong><br />
Würfel animiert: Der eine wird einmal, der<br />
andere zweimal gedreht.<br />
Um die gesamte Implementierung dieser<br />
einfachen Szene anzusehen, laden Sie den<br />
vollständigen Quellcode herunter [1].<br />
Fazit<br />
In diesem Artikel haben Sie erfahren, wie Sie<br />
OpenGL ES auf Android initialisieren und<br />
konfigurieren. Sie verwendeten die Klasse<br />
GLSurfaceView, um die Konfiguration von<br />
OpenGL-Kontexten und Oberflächen zu vereinfachen.<br />
Sie haben auch gelernt, wie Sie<br />
Puffer <strong>für</strong> den sicheren Gebrauch von<br />
OpenGL einstellen, und wie Sie Texturen einfach<br />
laden und anwenden. Zahlreiche Bücher<br />
sind zum Thema OpenGL und Grafik-Programmierung<br />
erschienen – die 3D-Programmierung<br />
ist eine sehr komplexe und vielschichtige<br />
Thematik. Hier haben wir lediglich<br />
an der „Oberfläche“ gekratzt, um es mit<br />
einem Wortspiel auszudrücken. Nun sind Sie<br />
bereit: Bauen Sie großartige 3D-Anwendungen<br />
<strong>für</strong> Android. Sind Sie damit fertig, dann<br />
schreiben Sie uns und erzählen uns von<br />
ihren Erfahrungen!<br />
● ● ●<br />
OpenGL ES 2.0<br />
Nahezu <strong>alle</strong> Android-Geräte unterstützen<br />
OpenGL ES 1.x, die Version, die wir in unserer<br />
Beispielanwendung verwendeten. OpenGL ES<br />
2.0 verfügt über keine Shader mit festen Funktionen,<br />
da<strong>für</strong> aber über eine voll programmierbare<br />
Shader-Pipeline. OpenGL ES 2.0 ist viel<br />
flexibler, braucht aber auch viel mehr an Konfiguration.<br />
Das Setup in Android ist sehr ähnlich,<br />
aber Sie fordern dann OpenGL ES 2.0 als<br />
zugrunde liegenden Kontext an. Dazu rufen Sie<br />
die setEGLContextClientVersion()-Methode<br />
mit dem Parameter 2 auf. So können Sie bei<br />
<strong>alle</strong>n betroffenen Rückrufen den GL10-Parameter<br />
einfach ignorieren und stattdessen immer<br />
die statische GLES20-Klasse aufrufen. Das<br />
Laden und Kompilieren von Shader-Programmen<br />
führen Sie genauso wie auf anderen Plattformen<br />
durch.<br />
88<br />
02/2011 <strong>smart</strong>-<strong>developer</strong>.de