2017-08-22 31 views
0

我试图加载下载的.zip包含.g3db和所有必需纹理的文件。它看起来像.g3db文件加载罚款与loadModel()方法。但正如我所见,TextureProvider方法名为load()只能读取Internal文件。FileTextureProvider仅从“内部”加载文件

任何想法如何强制ModelLoader只使用Absolute路径?

代码加载时

加载模型

UBJsonReader jsonReader = new UBJsonReader(); 
G3dModelLoader modelLoader = new G3dModelLoader(jsonReader); 
model = modelLoader.loadModel(Gdx.files.absolute(modelPath)); 

FileTextureProvider load()方法

@Override 
public Texture load (String fileName) { 
    Texture result = new Texture(Gdx.files.internal(fileName), useMipMaps); 
    result.setFilter(minFilter, magFilter); 
    result.setWrap(uWrap, vWrap); 
    return result; 
} 

错误纹理

Caused by: com.badlogic.gdx.utils.GdxRuntimeException: Error reading file: /data/user/0/com.app.sample/files/model/flower/flowerTextures.png (Internal) 
                       at com.badlogic.gdx.backends.android.AndroidFileHandle.read(AndroidFileHandle.java:77) 
                       at com.badlogic.gdx.files.FileHandle.readBytes(FileHandle.java:222) 
                       at com.badlogic.gdx.graphics.Pixmap.<init>(Pixmap.java:144) 
                       at com.badlogic.gdx.graphics.TextureData$Factory.loadFromFile(TextureData.java:98)  
                       at com.badlogic.gdx.graphics.Texture.<init>(Texture.java:100)  
                       at com.badlogic.gdx.graphics.Texture.<init>(Texture.java:96)  
                       at com.badlogic.gdx.graphics.g3d.utils.TextureProvider$FileTextureProvider.load(TextureProvider.java:52)  
                       at com.badlogic.gdx.graphics.g3d.Model.convertMaterial(Model.java:292)  
                       at com.badlogic.gdx.graphics.g3d.Model.loadMaterials(Model.java:268)  
                       at com.badlogic.gdx.graphics.g3d.Model.load(Model.java:107)  
                       at com.badlogic.gdx.graphics.g3d.Model.<init>(Model.java:102)  
                       at com.badlogic.gdx.assets.loaders.ModelLoader.loadModel(ModelLoader.java:54)  
                       at com.badlogic.gdx.assets.loaders.ModelLoader.loadModel(ModelLoader.java:69)  
                       at com.app.sample.sdk.libgdx.ar.Display$2.call(Display.java:71)  
                       at com.app.sample.libgdx.ar.Display$2.call(Display.java:62)  
                       at rx.internal.operators.OnSubscribeFromCallable.call(OnSubscribeFromCallable.java:48)  
                       at rx.internal.operators.OnSubscribeFromCallable.call(OnSubscribeFromCallable.java:33)  
                       at rx.Observable.unsafeSubscribe(Observable.java:8460)  
                       at rx.internal.operators.OperatorSubscribeOn$1.call(OperatorSubscribeOn.java:94)  
                       at rx.internal.schedulers.CachedThreadScheduler$EventLoopWorker$1.call(CachedThreadScheduler.java:222)  
                       at rx.internal.schedulers.ScheduledAction.run(ScheduledAction.java:55)  
                       at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:423)  
                       at java.util.concurrent.FutureTask.run(FutureTask.java:237)  
                       at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:269)  
                       at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1113)  
                       at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:588)  
                       at java.lang.Thread.run(Thread.java:818)  
                       Caused by: java.io.FileNotFoundException 
+0

什么平台? Android有很多文件限制。您需要非常仔细地阅读LibGDX文档。 – Tenfour04

+0

在Android上可以。 – JakubW

回答

0

事实证明,你可以使用AssetManager加载存储为内部数据文件。成功的关键是使用AbsoluteFileHandleResolver()

这是我如何从应用程序中的自定义创建的文件夹加载我的Model

private Model loadModelFromFile(File file) { 
    AssetManager assets = new AssetManager(new AbsoluteFileHandleResolver()); 
    assets.load(file.getPath(), Model.class); 
    assets.finishLoading(); 
    return assets.get(file.getPath(), Model.class); 
} 
0

它说,在文档libgdx是为Android,你需要让你的资产,无论是作为一个资源或资产的文件夹中。因此,如果您必须将资产置于android资产文件夹中,则强制加载器使用文件路径没有意义。

https://github.com/libgdx/libgdx/wiki/File-handling

+0

只要我有这些在我的资产文件夹,我不会因为我从API下载文件。而且您无法将文件下载到资产文件夹。 – JakubW