Libgdx 3D - 点光源显示黑框和矩形(点光源不工作)
Libgdx 3D - Point Light shows black box & rect (PointLight not working)
我正在创建一个 3d 场景,当前是一个方框和一个矩形,并尝试启用照明。
When i create a PointLight and add it to Environment everything turns to black color?
我想做的就是创建一个 3d 场景并启用点光源,例如太阳或光线来自一个点并对对象进行着色。
代码:
environment = new Environment();
environment.add(new PointLight().set(1f, 1f, 1f, 0, 0, 20f, 100f));
modelBatch=new ModelBatch();
..
square=new ModelBuilder().createBox(300,300,300,new Material(ColorAttribute.createDiffuse(Color.GREEN)),
VertexAttributes.Usage.Position | VertexAttributes.Usage.Normal);
squareinst=new ModelInstance(square);
squareinst.transform.setTranslation(-500,0,0);
--
sprites.get(0).setRotationY(sprites.get(0).getRotationY() + 1f);
sprites.get(1).setRotationY(sprites.get(1).getRotationY() - 1f);
squareinst.transform.rotate(1,0,0,1);
modelBatch.begin(camera);
for(Sprite3D sp:sprites)// has 3d rect models
sp.draw(modelBatch,environment);
modelBatch.render(squareinst,environment);
modelBatch.end();
PointLight 将一切变黑
不使用环境或灯光
根据我的调查,这里如果点光源不工作那么一切都应该像现在一样是黑色的,因为环境需要光,它可以很好地使用定向光(即使在旋转后矩形的背面也是黑色的,我不知道不知道为什么)
libgdx 版本 1.6.1 - android 工作室
我在 android 设备和桌面
上都检查过
拜托,我真的需要让这个 PointLight 正常工作,我不知道它是否需要自定义着色器,如果需要,请指导我访问一些链接,因为我没有使用着色器的经验。我还读到 PointLight 在某些设备上不工作或在启用 opengl 2.0 时不工作,但我不确定。
我尝试了很多东西和价值观。我知道环境光,但这对我的情况没有用。定向光的使用也有限制(如果这不起作用,可以用作后备)。
编辑:
它现在可以工作了,检查下面的答案:
- 如果您使用的是大尺寸相机或大尺寸模型,请尝试在点光源强度中添加更多的零点,直到光线可见。
这是一个非常简单的示例,显示了围绕球体旋转的点光源:
public class PointLightTest extends ApplicationAdapter {
ModelBatch modelBatch;
Environment environment;
PerspectiveCamera camera;
CameraInputController camController;
PointLight pointLight;
Model model;
ModelInstance instance;
@Override
public void create () {
modelBatch = new ModelBatch();
camera = new PerspectiveCamera();
camera.position.set(5f, 5f, 5f);
camera.lookAt(0f, 0f, 0f);
camController = new CameraInputController(camera);
environment = new Environment();
environment.set(new ColorAttribute(ColorAttribute.AmbientLight, 0.4f, 0.4f, 0.4f, 1.0f));
environment.add(pointLight = new PointLight().set(0.8f, 0.8f, 0.8f, 2f, 0f, 0f, 10f));
ModelBuilder mb = new ModelBuilder();
model = mb.createSphere(1f, 1f, 1f, 20, 10, new Material(ColorAttribute.createDiffuse(Color.GREEN)), Usage.Position | Usage.Normal);
instance = new ModelInstance(model);
Gdx.input.setInputProcessor(camController);
}
@Override
public void resize (int width, int height) {
camera.viewportWidth = width;
camera.viewportHeight = height;
camera.update();
}
@Override
public void render () {
Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT | GL20.GL_DEPTH_BUFFER_BIT);
camController.update();
pointLight.position.rotate(Vector3.Z, Gdx.graphics.getDeltaTime() * 90f);
modelBatch.begin(camera);
modelBatch.render(instance, environment);
modelBatch.end();
}
@Override
public void dispose () {
model.dispose();
modelBatch.dispose();
}
}
注意灯光需要在模型之外,并且在模型的范围内才能照亮模型。尝试将光线逐渐远离模型或移向模型时会发生什么。另一个示例中的 Renderable 用于可视化光的这个位置。
我正在创建一个 3d 场景,当前是一个方框和一个矩形,并尝试启用照明。
When i create a PointLight and add it to Environment everything turns to black color?
我想做的就是创建一个 3d 场景并启用点光源,例如太阳或光线来自一个点并对对象进行着色。
代码:
environment = new Environment();
environment.add(new PointLight().set(1f, 1f, 1f, 0, 0, 20f, 100f));
modelBatch=new ModelBatch();
..
square=new ModelBuilder().createBox(300,300,300,new Material(ColorAttribute.createDiffuse(Color.GREEN)),
VertexAttributes.Usage.Position | VertexAttributes.Usage.Normal);
squareinst=new ModelInstance(square);
squareinst.transform.setTranslation(-500,0,0);
--
sprites.get(0).setRotationY(sprites.get(0).getRotationY() + 1f);
sprites.get(1).setRotationY(sprites.get(1).getRotationY() - 1f);
squareinst.transform.rotate(1,0,0,1);
modelBatch.begin(camera);
for(Sprite3D sp:sprites)// has 3d rect models
sp.draw(modelBatch,environment);
modelBatch.render(squareinst,environment);
modelBatch.end();
PointLight 将一切变黑
不使用环境或灯光
根据我的调查,这里如果点光源不工作那么一切都应该像现在一样是黑色的,因为环境需要光,它可以很好地使用定向光(即使在旋转后矩形的背面也是黑色的,我不知道不知道为什么)
libgdx 版本 1.6.1 - android 工作室 我在 android 设备和桌面
上都检查过拜托,我真的需要让这个 PointLight 正常工作,我不知道它是否需要自定义着色器,如果需要,请指导我访问一些链接,因为我没有使用着色器的经验。我还读到 PointLight 在某些设备上不工作或在启用 opengl 2.0 时不工作,但我不确定。
我尝试了很多东西和价值观。我知道环境光,但这对我的情况没有用。定向光的使用也有限制(如果这不起作用,可以用作后备)。
编辑:
它现在可以工作了,检查下面的答案:
- 如果您使用的是大尺寸相机或大尺寸模型,请尝试在点光源强度中添加更多的零点,直到光线可见。
这是一个非常简单的示例,显示了围绕球体旋转的点光源:
public class PointLightTest extends ApplicationAdapter {
ModelBatch modelBatch;
Environment environment;
PerspectiveCamera camera;
CameraInputController camController;
PointLight pointLight;
Model model;
ModelInstance instance;
@Override
public void create () {
modelBatch = new ModelBatch();
camera = new PerspectiveCamera();
camera.position.set(5f, 5f, 5f);
camera.lookAt(0f, 0f, 0f);
camController = new CameraInputController(camera);
environment = new Environment();
environment.set(new ColorAttribute(ColorAttribute.AmbientLight, 0.4f, 0.4f, 0.4f, 1.0f));
environment.add(pointLight = new PointLight().set(0.8f, 0.8f, 0.8f, 2f, 0f, 0f, 10f));
ModelBuilder mb = new ModelBuilder();
model = mb.createSphere(1f, 1f, 1f, 20, 10, new Material(ColorAttribute.createDiffuse(Color.GREEN)), Usage.Position | Usage.Normal);
instance = new ModelInstance(model);
Gdx.input.setInputProcessor(camController);
}
@Override
public void resize (int width, int height) {
camera.viewportWidth = width;
camera.viewportHeight = height;
camera.update();
}
@Override
public void render () {
Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT | GL20.GL_DEPTH_BUFFER_BIT);
camController.update();
pointLight.position.rotate(Vector3.Z, Gdx.graphics.getDeltaTime() * 90f);
modelBatch.begin(camera);
modelBatch.render(instance, environment);
modelBatch.end();
}
@Override
public void dispose () {
model.dispose();
modelBatch.dispose();
}
}
注意灯光需要在模型之外,并且在模型的范围内才能照亮模型。尝试将光线逐渐远离模型或移向模型时会发生什么。另一个示例中的 Renderable 用于可视化光的这个位置。