聚光灯在libGDX中不起作用

土豆

我在libGDX中玩Spotlight。我使用此代码将光源投射到-y方向。令我惊讶的是,我的floorModel是完全黑色的。我去看文档,发现了一个有趣的事实:

请注意,默认着色器不支持聚光灯,您必须提供自己的着色器才能使用此类。

我认为这可能是聚光灯无法正常工作的原因。但是,我发现了0个正确设置聚光灯的示例。您能否提供一个有关正确设置聚光灯的简单示例?

编辑阅读第一个问题的人员:在第二次导出自定义对象之后,灯光交互将按预期进行,这意味着仅使用聚光灯时该对象不可见。不知道为什么。

public void show() {
       float factor=3f;
    camera = new PerspectiveCamera(45, Gdx.graphics.getWidth(),Gdx.graphics.getHeight());
    camera.position.set(1.4f * factor, 6f, -1f * factor);


    camera.lookAt(0f,0f,0f);
    camera.near =0.1f;
    camera.far = 300f;

    modelBatch = new ModelBatch();
    modelBuilder=new ModelBuilder();

    UBJsonReader jsonReader = new UBJsonReader();

    G3dModelLoader modelLoader = new G3dModelLoader(jsonReader);
    model = modelLoader.loadModel(Gdx.files.getFileHandle("convertedModel3.g3db", Files.FileType.Internal));
    floorModel = modelBuilder.createBox(30,1,30,new Material(ColorAttribute.createDiffuse(Color.BLUE)), VertexAttributes.Usage.Position|VertexAttributes.Usage.Normal);
    modelInstance = new ModelInstance(model);
    floorInstance=new ModelInstance(floorModel);

    Array<Material> materials=modelInstance.materials;

    materials.get(0).set(ColorAttribute.createDiffuse(Color.WHITE));
    materials.get(0).set(ColorAttribute.createReflection(Color.WHITE));


    float intensity = 0.1f;
    environment = new Environment();

    Vector3 pos = new Vector3(0,10,0);
    Vector3 dir = new Vector3(0,-10,0);

    environment.add(new SpotLight().set(Color.WHITE,pos,dir,1f,100,1));
}



@Override
    public void render(float delta) {
        Gdx.gl.glViewport(0, 0, Gdx.graphics.getWidth(), Gdx.graphics.getHeight());
        Gdx.gl.glClearColor(0, 0, 0, 1);
        Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT | GL20.GL_DEPTH_BUFFER_BIT);

        camera.update();


        modelBatch.begin(camera);
        modelBatch.render(modelInstance, environment);
        modelBatch.render(floorInstance,environment);
        modelBatch.end();}

如文档所述,当前默认着色器不支持Spotlight。这是因为好的通用聚光灯需要每个片段照明,而默认着色器使用每个顶点照明。因此,您不会找到一个简单的例子。您可以等待包含此拉取请求您可以使用它作为示例(尽管这可能对您的用法有些大材小用,而且肯定不简单)。或者,您可以提供自己的包含聚光灯的着色器。

这是有关如何创建着色器的基本教程该Wiki页面包含有关如何自定义着色器的更多信息。实际的着色器实现不是真正针对libGDX的(统一名称除外),您可以使用任何与目标设备兼容的算法。

在这里,您可以找到有关如何调整默认(每个顶点照明)着色器以某种程度上支持聚光灯(质量取决于您的模型)的示例。请注意,对DefaultShader的修改已包含在内,在这种情况下,您只需要关注实际的着色器(GLSL)程序即可。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

自动完成在 VS 代码中不起作用,也无法从我的 Mac 禁用聚光灯命令 + 空格也不起作用

来自分类Dev

在OpenGL场景中创建聚光灯

来自分类Dev

聚光灯搜索中消失的“东西”

来自分类Dev

SpriteKit聚光灯效果

来自分类Dev

iPhone中类似HTML的聚光灯框

来自分类Dev

使用Python在图像中创建“聚光灯”

来自分类Dev

iPhone中类似HTML的聚光灯框

来自分类Dev

聚光灯阴影贴图的计算偏差

来自分类Dev

聚光灯列内的计算

来自分类Dev

如何在DirectX11中正确创建聚光灯?

来自分类Dev

如何在OpenGL中创建平滑的边缘聚光灯?

来自分类Dev

为什么聚光灯关了没有灯出来?

来自分类Dev

尝试在Android画布上进行聚光灯效果

来自分类Dev

Three.js聚光灯不会投射阴影

来自分类Dev

如何查看当前正在索引哪些文件聚光灯

来自分类Dev

在黑暗的环境光上应用聚光灯 - HLSL - Monogame

来自分类Dev

为什么我的three.js场景中的聚光灯始终保持在相机视角的中心,而仅在Android的Chrome上?

来自分类Dev

Viber指示灯不起作用

来自分类Dev

夜灯在 LightDm 上不起作用

来自分类Dev

CSS3聚光灯效果,使用带有渐变的圆角矩形

来自分类Dev

切断三个js,聚光灯/阴影相机

来自分类Dev

/ usr / bin /下的自制软件,聚光灯和升级软件

来自分类Dev

如何使我的Javascript仅显示一个集中在鼠标上的聚光灯?

来自分类Dev

强制用户仅从过滤器聚光灯中选择一个值

来自分类Dev

LibGDX:序列不起作用

来自分类Dev

LibGDX:序列不起作用

来自分类Dev

LibGDX剪刀不起作用

来自分类Dev

libgdx的文本字段中的特殊字符不起作用

来自分类Dev

滑动libgdx中的弹出窗口不起作用

Related 相关文章

热门标签

归档