【问题标题】:Rendered 3d object using libgdx does not have colors as used to create using blender使用 libgdx 渲染的 3d 对象没有使用搅拌器创建的颜色
【发布时间】:2019-12-15 08:13:40
【问题描述】:

我使用搅拌机创建了一个 3d 对象。我将它导出为 g3db 和 gsdj 类型并与 libgdx 一起使用。一切正常,但对象的颜色未按预期呈现。

我尝试使用各种方法来创建对象并使用搅拌机导出。并且在过去,我曾尝试使用 libgdx-fbx-conv 将 fbx 转换为 g3db。它也不起作用。

public class experiments extends ApplicationAdapter {

    private ModelBatch modelBatch;
    private Environment environment;
    private PerspectiveCamera cam;
    private Model model;
    private ModelInstance instance;
    private CameraInputController camController;

    @Override
    public void create() {
        modelBatch = new ModelBatch();
        environment = new Environment();
        environment.set(new ColorAttribute(ColorAttribute.AmbientLight, 0.4f, 0.4f, 0.4f, 1f));
        float color = 0.0001f;
        environment.add(new DirectionalLight().set(color, color, color, -1f, -0.8f, -0.2f));

        cam = new PerspectiveCamera(67, Gdx.graphics.getWidth(), Gdx.graphics.getHeight());
        cam.position.set(3f, 3f, 3f);
        cam.lookAt(0, 0, 0);
        cam.near = 1f;
        cam.far = 300f;
        cam.update();

        G3dModelLoader loader = new G3dModelLoader(new UBJsonReader());
        model = loader.loadModel(Gdx.files.internal("test.g3db"));
        instance = new ModelInstance(model);

        camController = new CameraInputController(cam);
        Gdx.input.setInputProcessor(camController);
    }

    @Override
    public void render() {
        camController.update();

        Gdx.gl.glViewport(0, 0, Gdx.graphics.getWidth(), Gdx.graphics.getHeight());
        Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT | GL20.GL_DEPTH_BUFFER_BIT);

        modelBatch.begin(cam);
        modelBatch.render(instance, environment);
        modelBatch.end();
    }

    @Override
    public void dispose() {
    }
}

这是搅拌机显示的 https://drive.google.com/open?id=1WAjrP_Z4IVjohk-CZSFeLk5st8PNOQGz

这就是我所拥有的

https://drive.google.com/open?id=1AbRGLathCuESesTpcTFvKue49V1k533Z

【问题讨论】:

  • 请将您的所有图片上传到您的 SO 问题中。场外资源的链接只能作为补充材料。

标签: java opengl libgdx blender


【解决方案1】:

这很可能与它的渲染方式有关。 Blender 使用 Cycles 或 Eevee(使用 Belender 2.8)渲染它,而 LibGDX 使用 OpenGl。这就像你用两个不同的相机拍摄同一个物体的照片。

【讨论】:

  • 感谢您的回复,我使用转换工具将 fbx 转换为 g3db。在转换之前预览 g3db 文件如下。所以我阅读了代码,我找不到它的预览模块有什么不同。并且该模块可以毫无问题地预览。 github.com/ASneakyFox/libgdx-fbxconv-gui 这是仓库,由 libgdx 编写。相同的文件呈现为相同代码中的差异。 drive.google.com/open?id=1j3gqhGA6_mY0lQJTq8iuau7Ai0RVChQ5
  • @Russel 好的,我没有回答你的问题,抱歉。
  • 我找到了解决这个问题的方法。但我无法意识到它在理论上做了什么。我们必须从 libgdx 中删除在搅拌机中使用的材料的发射效果。 for (Material m : model.materials) { m.remove(ColorAttribute.Emissive); }
猜你喜欢
  • 2011-06-28
  • 2020-11-02
  • 2014-04-20
  • 2012-08-07
  • 2015-10-24
  • 1970-01-01
  • 2011-03-04
  • 2012-04-18
  • 2017-03-24
相关资源
最近更新 更多