【问题标题】:libgdx: rendering a model w/ texture, looks washed outlibgdx:渲染带有纹理的模型,看起来已经褪色
【发布时间】:2019-05-21 07:40:21
【问题描述】:

我正在使用 LibGDX 和 Blender 进行一项初学者练习来渲染 3d 模型。

我创建了一个六面骰子,对其进行 uvunwrap 并创建了一个 png 文件 uvmap。在 Blender 中看起来不错。但是,在游戏窗口中,它显示为灰色。

我尝试了几种不同的灯光配置,但都没有成功。这可能是一个物质问题吗?有什么建议吗?

截图和代码如下。谢谢!

public class ShipRenderer implements ApplicationListener {
public Environment environment;
public PerspectiveCamera cam;
public CameraInputController camController;
public ModelBatch modelBatch;
public Model model;
public ModelInstance instance;

Color lightColor;
PointLight light;

float DISTANCE = 40f;

@Override
public void create() {
    modelBatch = new ModelBatch();
    environment = new Environment();
    environment.set(new ColorAttribute(ColorAttribute.AmbientLight, 1f, 1f, 1f, 1.0f));

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

    UBJsonReader jsonReader = new UBJsonReader();
    G3dModelLoader loader = new G3dModelLoader(jsonReader);
    model = loader.loadModel(Gdx.files.internal("dice/dice.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();
}

【问题讨论】:

    标签: opengl libgdx textures lighting


    【解决方案1】:

    好的,结果我的 Blender 模型正在“发光”,换句话说,它正在发光。但是搅拌机 3dView 没有显示这个。

    我将搅拌机文件导出为 G3DJ 文件以便能够查看内容。从那里我们看到“发射”属性是非零的。将其归零,现在看起来正确。这里是白色背景。

    非常感谢 LibGDX Discord 频道!

    【讨论】:

    • 请你解释一下你是如何把这个归零的?我遇到了同样的问题。由于某种原因,我也无法让 Will Davies 修改的 fbx-conv.exe 工作。谢谢。
    • @hamham,您需要做两件事:1)将 fbx 导出为 json 格式,以便您可以手动修改值,以及 2)打开文件,找到发射值部分并更改它归零。
    • 感谢@ether_joe,我不知道如何将 fbx 导出为 json,但我知道如何在加载后从材料中删除发射属性。我将添加此解决方案作为答案,因为它可能对其他人有帮助。
    • @hamham 的语法看起来像 fbx-conv -f -o G3DJ file.fbx github.com/libgdx/libgdx/wiki/…
    【解决方案2】:

    如果有人遇到这个问题,这里有一个解决方案,可以在加载模型后删除发射材料属性。我个人在将 fbx 导出为 json 时遇到了麻烦,所以这是对我有用的唯一方法。

    private void removeEmissiveAttributes(Model model){
        for(Material m : model.materials){
            m.remove(ColorAttribute.Emissive);
        }
    }
    

    【讨论】:

      猜你喜欢
      • 2014-04-03
      • 2014-10-28
      • 2011-11-24
      • 2017-03-17
      • 1970-01-01
      • 1970-01-01
      • 2017-02-26
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多