2017-08-22 30 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