我在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] 删除。
我来说两句