2016-05-01 14 views
1

Ich entwickle ein Spiel, eigentlich mein erstes Spiel, also bin ich neu in dieser Welt, ich benutze OpenGL mit NDK und C++ für den Renderpart, und ich rufe es aus Java mit JNI. Ich bin mit dem Thema Texturen festgefahren, da ich PNG mit Alpha-Kanal verwenden und TTF für Text verwenden muss.PNG Textur OpenGL es 2.0 Android NDK

Ich kann die Libpng einschließen, aber da ich die experimentelle Gradle Puglin verwende, weiß ich nicht, wie Sie die Bibliothek hinzufügen und verwenden, sah ich, dass die Bibliothek vorkompiliert und hinzugefügt werden kann, aber von was Ich sah, nur für eine Architektur, dann weiß ich nicht, ob ich falsch liege, aber ich denke, wenn ich den Quellcode der Bibliothek hinzufüge und es mit dem Programm kompiliere, denke ich, wird es für die Architekturen kompiliert das brauche ich (MIPS, 64-bit ARM, x86, 64-bit x86, ARM), also das ist einer, ich habe mir gedacht das PNG im Roh-RGBA vorkonvertieren und diesen Vektor direkt mit OpenGL verwenden aber nochmal, ich dont weiß, wie man das macht.

und mit der TTF-Ausgabe, nun, ich bin leer, wenn Sie einen Rat dafür haben, würde ich es sehr zu schätzen wissen.

Danke für Ihre Hilfe.

+0

Checkout FreeType zum Rendern von TTF-Fonts. Setzen Sie "FreeType OpenGL" in die Suche nach mehr Informationen (https://wildfiregames.com/forum/index.php?/topic/17365-freetype-ttf-fonts-in-opengl/ ist ein gutes Intro) –

+0

Für PNGs Sie entweder muss eine C/C++ Bibliothek erstellen. Oder Sie können JNI verwenden, da die Java-Seite PNGs in eine Java-Bitmap laden kann. Sie können dann die rohen Bytes aus der Bitmap verwenden, um Ihre Textur zu füllen. –

Antwort

2

Sie können die gesamte FreeType-Engine in Ihren Code einbauen, oder Sie können einfach verwenden, was bereits Teil von Android ist: Verwenden Sie Canvas, um Glyphen zu einer Bitmap zu rendern. Ein Beispiel dafür finden Sie in Android Breakout. Das Spiel ist in Java und nicht in C++ geschrieben, aber der GLES-Code in Java-Sprache ist nur eine dünne Hülle um das native Zeug, also ist es ziemlich ähnlich.

Es gibt einen ziemlich guten Blogpost über GLES Text auf Android here.

In ähnlicher Weise haben Sie bereits eine Kopie von libpng in Ihrer App. Sie können die Bitmap-API aufrufen, um sie zu verwenden.

Wenn Sie die Erstellung einer vollständig eigenständigen nativen App zum Ziel haben, ist der Ansatz des Aufrufs in Canvas/Bitmap nicht praktikabel. Ich denke jedoch nicht, dass dies ein besonders nützliches Ziel ist. Sie sind besser dran, die "Game Engine" von der Spiellogik zu trennen, z. haben Plattform-spezifische "PNG-Decodierung" und "diesen Stapel von RGBA-Pixeln in glTexImage2D()" Funktionen übergeben, und Plattform-agnostic "Textur N verwenden".

Wenn Sie diesen einen Schritt weiter gehen, ist Ihre beste Vorgehensweise, eine vorhandene Grafik-Engine oder Game-Engine zu verwenden und sich auf das Erstellen des Spiels zu konzentrieren, anstatt die Engine zu schreiben. Es ist ein lohnendes Unterfangen, etwas über Suchmaschinen zu lernen, aber wenn es Ihr eigentliches Ziel ist, ein Spiel zu schreiben, dann sollten Sie sich auf das Spiel selbst konzentrieren.

+0

Ich denke für den Moment werde ich Java Btimap-Lösung verwenden, also Wie wäre es? render die glyphs in eine bitmap, und dann usa diese bipmap als eine art spritesheet? oder wie? – quetzalfir

+0

Genau. Eine kurze Codebeispiel finden Sie unter dem Breakout-Link und der Blog-Link für eine Erläuterung mit Diagrammen. Sie können ein Bitmap voller Glyphen erstellen und es von Java-Quelle auf GLES hochladen, dann verwenden Sie einfach die Textur aus dem nativen Code. – fadden