libGDX 3D阴影

che*_*o_c 5 java 3d shadow libgdx

我使用libGDX,这是一个桌面项目.

我有2个模型,一个是角色,另一个是地图,如下图所示:

在此输入图像描述

我的问题是:

如何在地板上投射角色的阴影?

你可以看到角色没有阴影,因此环境光.我该使用什么或如何实现这一目标?我应该假装阴影还是有真正的阴影投射方式?

欢迎提出任何意见或建议.

Nol*_*esh 5

您可以使用以下代码:

Environment environment;
DirectionalShadowLight shadowLight;

@Override
public void show() {
    modelBatch = new ModelBatch(); 
    environment = new Environment();
    environment.set(new ColorAttribute(ColorAttribute.AmbientLight, 1.0f, 1f, .6f, 1f));
    environment.add((shadowLight = new DirectionalShadowLight(1024, 1024, 60f, 60f, .1f, 50f))                  
                .set(1f, 1f, 1f, 40.0f, -35f, -35f));   
    environment.shadowMap = shadowLight; 

    shadowBatch = new ModelBatch(new DepthShaderProvider());
}

@Override
public void render(float delta) {
        //create shadow texture
        shadowLight.begin(Vector3.Zero, camera.direction);
        shadowBatch.begin(shadowLight.getCamera());

        shadowBatch.render(instances);

        shadowBatch.end();
        shadowLight.end();

        //render scene
        Gdx.gl.glClearColor(0, 0, 0, 1);
        Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT | GL20.GL_DEPTH_BUFFER_BIT);


        modelBatch.begin(cam);      
        modelBatch.render(instances, environment);  //environment has shadowMap!
        modelBatch.end();
}
Run Code Online (Sandbox Code Playgroud)

  • 不推荐使用ShadowMap和DirectionalShadowLight.很想看到一个新的答案. (5认同)