26.02.2014 Aufrufe

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

Hurra! Ihre Datei wurde hochgeladen und ist bereit für die Veröffentlichung.

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!