我正在使用3D OpenGL ES视图创建Android应用程序,该视图将包含从wavefront 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上还有其他更好的方法。 请记住,有大量数据需要处理! 我正在寻找的是好的解决方案,我认为我们不需要关心硬盘上的空间只关心加载时间和内存使用情况!
答案 0 :(得分:0)
我不久前在开发自己的应用程序时遇到了这个问题(https://market.android.com/details?id=de.hsrm.objectify),这个AFAIK的最佳解决方案是序列化整个数据并将其写入SD卡。从外部存储中保存和加载对象并不像您想象的那么慢。
加载〜15.000具有纹理的顶点和法线大约需要1秒。至少在我的情况下。