在Libgdx Android项目中,已使用来自指南针和加速度计传感器的定向角来设置透视相机的方向。一个简单的模型是使用 modelBuilder.createBox()方法创建的多维数据集。问题是在渲染过程中移动相机时,立方体模型会变形。
@Override
public void create() {
float baseVerticalFov = 67;
camera = new PerspectiveCamera(baseVerticalFov, Gdx.graphics.getWidth(), Gdx.graphics.getHeight());
camera.near = 0f; // z near
camera.far = 500f;
camera.update();
modelBatch = new ModelBatch();
}
private Model createPointModel(Color color) {
Model pointModel;
ModelBuilder modelBuilder = new ModelBuilder();
int s = 1;
Material material = new Material(ColorAttribute.createDiffuse(color));
long attributes = VertexAttributes.Usage.Position | VertexAttributes.Usage.Normal;
pointModel = modelBuilder.createBox(1f * s, 1f * s, 1f * s, material, attributes);
}
private void loadModel() {
ModelInstance m1 = new ModelInstance(createPointModel(Color.GREEN));
mn1.transform.setToTranslation(3, 0, 1);
modelInstances.add(m1);
}
@Override
public void render() {
if (!isLoaded) {
loadModel();
isLoaded = true;
}
Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT | GL20.GL_DEPTH_BUFFER_BIT);
int w = Gdx.graphics.getWidth();
int h = Gdx.graphics.getHeight();
Gdx.gl.glViewport(0, 0, w, h);
if (locationProvider != null) {
orientationValues = orientationSensorFusion.getOrientationValues();
Vector3 pointing = OrientationSensorFusion.getDirection(orientationValues);
camera.position.set(0, 0, 0);
camera.direction.set(pointing);
camera.update();
modelBatch.begin(camera);
modelBatch.render(modelInstances);
modelBatch.end();
}
}
这些图像从不同角度显示了红色立方体。
这是呈现3D对象的gif效果,同时以0.5步增加方位角,如屏幕左上方所示。另一个问题是,相机方向无法根据方位角值平滑旋转。
这是向环境中添加一些光线后的结果。
答案 0 :(得分:0)
显示的代码不足以确保确定,但是我认为最可能的原因是您的方向矢量未标准化。必须先对camera.direction
进行标准化,然后再调用camera.update()
。