android - 纹理渲染无效

标签 android model opengl-es libgdx textures

我有一个模型,我用 AssetManager 加载它然后渲染它。它是一个g3dj 文件,带有png 纹理。所有文件都存在于文件系统中。

在我的例子中,我从服务器加载一个模型并将其添加到游戏中。 纹理 存在但未正确呈现。

当我在 ApplicationListener 中的 create() 方法之后添加它时,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

最佳答案

终于找到了解决办法。问题是 AssetManager 会抛出异常消息:“在没有当前上下文的情况下调用 OpenGL ES API(每个线程记录一次)”如果您强制加载 AssetManager 资源:

assetManager.finishLoading();

要使 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();
    }
}

关于android - 纹理渲染无效,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47868150/

相关文章:

iphone - iPhone 版 OpenGL ES

ios - 缩放 OpenGL ES 帧缓冲区的内容

android - 我可以在 Monodroid 中使用什么来替代 Action Bar?

ruby-on-rails - Rails 模型可以有多复杂?样本项目?

ios - 存储日期组件而不是日期

ruby-on-rails - 迁移数据库和种子时出现 Ruby 错误

android - 有没有适用于 Android OpenGL ES 的多边形三角测量工具?

android - 构建用于多类分类的 tflite 模型

android - 在另一个 Activity 中调用 view flipper?

android - 上下文操作栏 : Done button