2017-12-18 428 views
3

我有一個模型,我加載AssetManager,然後渲染它。這是一個g3dj文件,帶有png紋理。所有文件都存在於文件系統中。無效的紋理渲染

就我而言,我從服務器加載模型並將其添加到遊戲中。 The texture存在但未正確呈現。

當我在方法ApplicationListener之後添加它時,ModelBatch會將我的模型完全呈現爲黑色。如果我在create()方法中添加模型,它將正確渲染。

什麼問題?我已經嘗試重新創建RenderContext

一些代碼:

@Override 
    public void create() { 
     //setup camera, environment, create ModelBatch instance 
     assetManager = new AssetManager(); 
     assetManager.load("models/f_base.g3dj", Model.class); 
     assetManager.finishLoading(); 
     Model model = assetManager.get("models/f_base.g3dj"); 
     modelInstance = new ModelInstance(model); 
    } 

@Override 
public void render() { 
    if (assetManager.update()) { 
     Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT | GL20.GL_DEPTH_BUFFER_BIT); 
     cameraController.update(); 
     batch.begin(camera); 
     batch.render(modelInstance); 
     batch.end(); 
    } 
} 

invalid model

+0

覺得這是更好,如果你刪你的文字ured圖像tbh。人們從工作中瀏覽StackOverflow,儘管它只是卡通裸露,但很多工作場所都對適合什麼有嚴格的規定。 – Columbo

+1

「當我在ApplicationListener中的create()方法後添加它時,ModelBatch呈現完全黑色模型。」 - 什麼時候創建它?我的猜測是你在一個沒有OpenGLES上下文綁定的線程中創建它。 – Columbo

回答

0

最後我找到了解決方案。問題是,AssetManager拋出異常帶的messge:「打電話的OpenGL ES API沒有當前上下文(每線程一旦登錄)」如果你強迫AssetManager資源加載:

assetManager.finishLoading(); 

要asynchronyously使AssetManager加載資源,你需要只需添加資源排隊:

assetManager.load(fileHandle.path(), Model.class); 

,然後檢查是否可以渲染update()方法的模型:

public void render() { 
    if (assetManager.update()) { 
     Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT | GL20.GL_DEPTH_BUFFER_BIT); 
     cameraController.update(); 
     batch.begin(camera); 
     //model loaded. you can render it. 
     batch.end(); 
    } 
}