Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ruby-on-rails-3/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
聚光灯在libGDX中不工作_Libgdx_Spotlight - Fatal编程技术网

聚光灯在libGDX中不工作

聚光灯在libGDX中不工作,libgdx,spotlight,Libgdx,Spotlight,我在libGDX玩聚光灯。我使用此代码将光源投影到-y方向。令我惊讶的是,我的地板模型完全是黑色的。我去了docs,发现了一个有趣的事实: 请注意,默认着色器不支持聚光灯,您必须提供自己的着色器才能使用此类。 我认为这可能是聚光灯不起作用的原因。但是,我发现了0个正确设置聚光灯的示例。你能提供一个简单的例子来正确设置聚光灯吗 为阅读第一个问题的读者编辑:在第二次导出自定义对象后,灯光交互作为exptected工作,这意味着仅使用聚光灯时对象不可见。不知道为什么 public void show(

我在libGDX玩聚光灯。我使用此代码将光源投影到-y方向。令我惊讶的是,我的地板模型完全是黑色的。我去了docs,发现了一个有趣的事实:

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

我认为这可能是聚光灯不起作用的原因。但是,我发现了0个正确设置聚光灯的示例。你能提供一个简单的例子来正确设置聚光灯吗

为阅读第一个问题的读者编辑:在第二次导出自定义对象后,灯光交互作为exptected工作,这意味着仅使用聚光灯时对象不可见。不知道为什么

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();}
public void show(){
浮动系数=3f;
camera=new PerspectiveCamera(45,Gdx.graphics.getWidth(),Gdx.graphics.getHeight());
摄像机位置设置(1.4f*系数,6f,-1f*系数);
摄像机。注视(0f,0f,0f);
摄像机近距离=0.1f;
照相机。远=300f;
modelBatch=新modelBatch();
modelBuilder=新的modelBuilder();
UBJsonReader jsonReader=新的UBJsonReader();
G3dModelLoader modelLoader=新G3dModelLoader(jsonReader);
model=modelLoader.loadModel(Gdx.files.getFileHandle(“convertedModel3.g3db”,files.FileType.Internal));
floorModel=modelBuilder.createBox(30,1,30,新材质(ColorAttribute.createDiffuse(Color.BLUE)),VertexAttribute.Usage.Position | VertexAttribute.Usage.Normal);
modelInstance=新的modelInstance(模型);
floorInstance=新模型实例(floorModel);
数组材质=modelInstance.materials;
materials.get(0.set)(ColorAttribute.createDiffuse(Color.WHITE));
materials.get(0.set)(ColorAttribute.createReflection(Color.WHITE));
漂浮强度=0.1f;
环境=新环境();
向量3位置=新向量3(0,10,0);
Vector3 dir=新的Vector3(0,-10,0);
添加(新聚光灯().set(Color.WHITE,pos,dir,1f,100,1));
}
@凌驾
公共无效渲染(浮动增量){
glViewport(0,0,Gdx.graphics.getWidth(),Gdx.graphics.getHeight());
glClearColor(0,0,0,1);
Gdx.gl.glClear(GL20.gl_颜色_缓冲_位| GL20.gl_深度_缓冲_位);
camera.update();
modelBatch.begin(摄像机);
render(modelInstance,environment);
渲染(地板净度、环境);
modelBatch.end();}

如文档所述,默认着色器当前不支持聚光灯。这是因为良好的通用聚光灯需要逐片段照明,而默认着色器使用逐顶点照明。因此,你找不到一个简单的例子。你可以等待被包括在内。你可以用它作为一个例子(虽然这可能是一个过度使用,当然不简单)。或者,您可以提供自己的着色器,其中包括聚光灯

关于如何创建着色器。包含有关如何自定义着色器的详细信息。实际的着色器实现并不是libGDX特有的(除了统一的名称),您可以使用任何与目标设备兼容的算法


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

比我想象的更难。。。现在回到灯光下。我在PointLight中遇到了完全相同的问题,尽管文档中没有说明处理PointLight的任何异常。这是我用来设置点光源的:Vector3 pos=newvector3(0,10,10);pointLight=新的pointLight().set(颜色为白色,位置为10);添加(点光源);