0

我正在使用 3D OpenGL ES 视图创建 android 应用程序,该视图将由从波前 obj 文件导入的 3D 模型组成。一个典型的 Wavefront obj 文件将只包含三角对象,它可能看起来像:

v 1.00000 1.00000 0
v 1.00000 -1.00000 0
v -1.00000 -1.00000 0
vt 1.00000 1.00000 0
vt 1.00000 -1.00000 0
vt -1.00000 -1.00000 0
vn 1.00000 1.00000 0
vn 1.00000 -1.00000 0
vn -1.00000 -1.00000 0
f 1/1/1 2/2/2 3/3/3

最后,所有这些都将转换为一个(一维)浮点数组。问题是这个文件很大,将它作为字符串加载,处理需要大量时间。(我们需要将文件加载到行中,然后将它们拆分为令牌,这需要大量时间和内存)我正在寻找替代方法和解决方案来存储一个准备好的数组。我唯一的想法是读取 .obj 文件并创建所需的数组。之后序列化数组,每次下一次执行应用程序时只需读取序列化数组。这是一个好主意还是在android上有其他更好的方法。请记住,有大量数据需要处理!我正在寻找的是好的解决方案,我认为我们不需要关心硬盘上的空间只关心加载时间和内存使用!

4

1 回答 1

0

前段时间我自己在开发自己的应用程序(https://market.android.com/details?id=de.hsrm.objectify)时遇到了这个问题,这个 AFAIK 的最佳解决方案是序列化整个数据和把它写到sd卡上。从外部存储中保存和加载对象并不像您想象的那么慢。

使用纹理加载 ~15.000 个顶点和法线大约需要 ~1 秒。至少在我的情况下。

于 2011-08-27T20:27:33.270 回答