libgdx:渲染带有纹理的模型,看上去褪色

时间:2019-01-28 05:59:55

标签: opengl libgdx textures lighting

我正在与LibGDX和Blender一起进行某种初学者的练习,以渲染3d模型。

我创建了一个六面的骰子,将其解开并创建了一个png文件uvmap。在Blender中看起来不错。但是,在游戏窗口中,它显得有些灰白。

我尝试了几种不同的灯光配置,但是没有运气。这可能是一个重大问题吗?有什么建议吗?

下面的屏幕截图和代码。谢谢!

blender 3d view enter image description here

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

2 个答案:

答案 0 :(得分:0)

好的,原来我的Blender模型正在“发光”,换句话说,它正在发光。搅拌器3dView却没有显示。

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

非常感谢LibGDX Discord频道!

enter image description here

答案 1 :(得分:0)

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

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