纹理的渲染无效

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了纹理的渲染无效相关的知识,希望对你有一定的参考价值。

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

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

当我在create()中的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

答案

最后我找到了解决方案问题是AssetManager抛出异常与messge:“调用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();
    }
}

以上是关于纹理的渲染无效的主要内容,如果未能解决你的问题,请参考以下文章

JOGL 和帧缓冲区渲染到纹理的问题:无效帧缓冲区操作错误

纹理的渲染无效

使用 OpenGL C++ 渲染到纹理

OpenGL 无效的纹理或状态

将整数渲染到 GLSL 中的单独纹理

从片段着色器中的地形高程数据计算法线