【问题标题】:PNG Texture OpenGL es 2.0 Android NDKPNG 纹理 OpenGL es 2.0 Android NDK
【发布时间】:2016-08-26 03:08:55
【问题描述】:

我正在开发一款游戏,实际上是我的第一个游戏,所以我是这个世界的新手,我使用 OpenGL 和 NDK 和 C++ 进行渲染部分,我使用 JNI 从 java 调用它。我坚持使用纹理主题,因为我需要将 PNG 与 alpha 通道一起使用,并对某些文本使用 TTF。

我可以包含libpng,但是由于我使用的是实验性的gradle puglin,所以我不知道如何添加库并使用它,我看到该库可以预编译和添加,但是从我看到了,只针对一种架构,那么,我不知道我是不是错了,但是我想如果我添加库的源代码并用程序编译它,我想,它将为架构编译我需要(MIPS,64 位 ARM,x86,64 位 x86,ARM),所以这是一个,我想在原始 RGBA 中预转换 png 并直接使用 opengl 的向量,但我不知道如何做到这一点。

对于TTF问题,我一无所知,如果您对此有任何建议,我将不胜感激。

感谢您的帮助。

【问题讨论】:

  • 检查 FreeType 以呈现 TTF 字体。将“FreeType OpenGL”放入搜索更多信息(wildfiregames.com/forum/index.php?/topic/… 是一个很好的介绍)
  • 对于 PNG,您要么必须构建 C/C++ 库。或者您可以使用 JNI,因为 Java 端可以将 PNG 加载到 Java 位图中,然后您可以使用位图中的原始字节来填充您的纹理。

标签: c++ opengl-es android-ndk textures libpng


【解决方案1】:

您可以将整个 FreeType 引擎构建到您的代码中,或者您可以只使用 Android 的一部分:使用 Canvas 将字形渲染到位图。您可以在Android Breakout 中找到这方面的示例。该游戏是用 Java 而不是 C++ 编写的,但 Java 语言的 GLES 代码只是对原生内容的一个薄包装,因此非常相似。

有一篇关于 Android here 上的 GLES 文本的不错的博文。

在类似的说明中,您的应用中已经有 libpng 的副本。您可以通过Bitmap API调用来使用它。

如果您的目标是创建一个完全独立的本机应用程序,那么调用 Canvas/Bitmap 的方法是不可行的。然而,我不认为这是一个特别有用的目标。您最好将“游戏引擎”与游戏逻辑分开,例如具有特定于平台的“解码 PNG”和“将这堆 RGBA 像素传递给glTexImage2D()”函数,以及与平台无关的“使用纹理 N”。

更进一步,您最好的方法是使用现有的图形引擎或游戏引擎,并专注于创建游戏而不是编写引擎。通过编写引擎来学习引擎是值得的,但如果您的实际目标是编写游戏,那么您应该专注于游戏本身。

【讨论】:

  • 我想目前我会使用 java Btimap 解决方案,那会怎么样?将字形渲染为位图,然后将该 bipmap 用作一种 spritesheet?或如何?
  • 没错。请参阅 Breakout 链接以获取简短的代码示例,以及博客链接以获取图表说明。您可以创建一个充满字形的位图并将其从 Java 源上传到 GLES,然后只需使用本机代码中的纹理。
猜你喜欢
  • 2011-09-14
  • 2012-04-08
  • 1970-01-01
  • 1970-01-01
  • 2011-05-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多