Sergiy Krutykov

In dem Unterabschnitt Interaktionen mit OpenGL-Objekten wurde die Funktion glReadPixels erwähnt, die aus OpenGL die Farben eines bestimmten Bereichs eines Framebuffers lesen kann. Diese Methode kann man auch dafür nutzen, dass man auch außerhalb von dem OpenGL-Kontext die von OpenGL gerenderten Bilder als Pixel-Arrays benutzt. Wenn man diese Funktion permanent anwendet, dann haben diese Bilder einen Vorteil wie bei der Vektorgrafik: Sie sind beliebig verlustfrei skalierbar und können animiert werden. Dies macht insbesondere Sinn, wenn man die Objekte, die in OpenGL-Teil des Programm bereits vorliegen, diese auch auf der Karte wiederverwenden will, wobei diese auf der Karte genauso animiert sein müssen wie in OpenGL selbst. In der folgenden Abbildung sieht man die Tresore und Geschenke, die von der OpenGL auf die Karte "geholt" werden:

Diese Gegenstände auf der Karte können beliebig (solange der Speicher ausreicht) verlustfrei skaliert werden. Das sind einfach Annotationen, die mit Hilfe von dem Pixel-Array, welches von der Funktion glReadPixels geliefert wird, gezeichnet werden. Dieses Zeichnen geschieht unter Benutzung der Vektorgrafik, was ermöglicht, die halbdurchsichtigen abgerundeten Rechtecke auf dem Hintergrund der Bitmaps aus OpenGL bei kleineren Zoomstufenzu platzieren. (Siehe Unterabschnitt iPhone in dem Abschnitt Karten.)

Damit diese Bilder in passender Größe gerendert werden, wird in OpenGL dafür ein Framebuffer benutzt, bei welchem jedes Mal der Viewport in der passenden Größe gesetzt wird und ein Tresor oder ein Geschenk aus einer bestimmten Blickrichtung darauf gerendert wird. Daraufhin braucht man nur glReadPixels auf den ganzen Bereich des Framebuffers anzuwenden.

Wenn man die Tresore in OpenGL animiert und glReadPixels permanent anwendet, dann lassen sich die Gegenstände auf der Karte ebenfalls animieren, was die folgende Abbildung zeigt:

Textur-Effekte auf der Karte

Es lassen sich auf der Karte auch die 2D-Effekte aus dem Abschnitt Spezielle Effekte anwenden, wenn die Karte als Textur vorliegt. Die folgende Abbildung zeigt zwei Effekte:

Links sind die Wellen, die über die Oberfläche der Karte laufen, wobei eine Welle aus der Mitte gelb leuchtet, und rechts sind zwei Wirbel dargestellt.

Im Gegensatz zu der Methode von oben, die die Bilder aus OpenGL einfach den Annotationen auf der Karte zuordnet, muss man bei diesem Vorgehen genau wissen, wo auf der Karte ein Effekt stattfindet, damit die passende Stelle der Textur als Basis für den Effekt genommen wird. Dafür muss man die reellen, geographischen Koordinaten der Annotation in die Bildschirmkoordinaten transformieren und diese dann in OpenGL verwenden.

Bei diesen Effekten muss man beachten, dass sie sehr aufwendig sind, so dass wenn eine Karte voll von Annotationen ist, das Prgramm sehr langsam werden kann. Außerdem ist das Vorgehen aus der urheberrechtlichen Gründen etwas zweifelhaft, da dadurch Teile der Karte verändert werden, die das Eigentum von Google sind.


Als Zugabe zu dem Unterabschnitt zeigt die folgende Abbildung, dass man mit OpenGL auch die Rauchwolken mit der Methode Particle Effects über die Karte ziehen lassen kann:


Page last modified on March 21, 2011, at 11:33 PM