2017-12-18 355 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(); 
    } 
}