【问题标题】:pan 3D model using libgdx使用 libgdx 平移 3D 模型
【发布时间】:2015-09-15 20:25:28
【问题描述】:

我正在尝试平移 3d 对象,但它似乎不起作用。我向左和向右滑动手势以沿 x 轴平移对象。我添加了一个 Log 语句,它清楚地显示了 logcat 中的平移值,但对象仍然没有移动。

这是我的代码

public class 3DTest implements ApplicationListener, GestureListener {

public ModelBatch modelBatch;
public Model model;
public ModelInstance instance;
public Environment environment;
public OrthographicCamera camera;
public CameraInputController camController;
public PerspectiveCamera cam;
public ModelLoader loader;

@Override
public void create() {
    // TODO Auto-generated method stub
    InputMultiplexer im = new InputMultiplexer();
    modelBatch = new ModelBatch();

    environment = new Environment();
    environment.set(new ColorAttribute(ColorAttribute.AmbientLight, 0.4f, 0.4f, 0.4f, 1f));
    environment.add(new DirectionalLight().set(0.8f, 0.8f, 0.8f, -1f, -0.8f, -0.2f));

    camera = new OrthographicCamera(1280, 720);

    cam = new PerspectiveCamera(67, Gdx.graphics.getWidth(), Gdx.graphics.getHeight());
    cam.position.set(1f, 1f, 1f);
    cam.lookAt(0,0,0);
    cam.near = 0.1f;
    cam.far = 300f;
    cam.update();

    camController = new CameraInputController(cam);

    loader = new ObjLoader();
    model = loader.loadModel(Gdx.files.internal("data/cube.obj"));
    instance = new ModelInstance(model);
    im.addProcessor(new GestureDetector(this));
    im.addProcessor(camController);
    Gdx.input.setInputProcessor(im);

}

@Override
public void dispose() {
    // TODO Auto-generated method stub
    modelBatch.dispose();
    model.dispose();
}

@Override
public void pause() {
    // TODO Auto-generated method stub

}

@Override
public void render() {
    // TODO Auto-generated method stub
    camController.update();

    Gdx.gl.glClearColor(1, 1, 1, 1);    

    Gdx.gl.glViewport(0, 0, Gdx.graphics.getWidth(), Gdx.graphics.getHeight());
    Gdx.gl.glClear(GL10.GL_COLOR_BUFFER_BIT | GL10.GL_DEPTH_BUFFER_BIT);

    modelBatch.begin(cam);
    modelBatch.render(instance, environment);
    modelBatch.end();
}

@Override
public void resize(int arg0, int arg1) {
    // TODO Auto-generated method stub

}

@Override
public void resume() {
    // TODO Auto-generated method stub

}

@Override
public boolean fling(float arg0, float arg1, int arg2) {
    // TODO Auto-generated method stub
    return false;
}

@Override
public boolean longPress(float arg0, float arg1) {
    // TODO Auto-generated method stub
    return false;
}

@Override
public boolean pan(float arg0, float arg1, float arg2, float arg3) {
    // TODO Auto-generated method stub
    Log.i("App","pan" +arg2);
    camera.translate(arg2, 0);
    camera.update();
    return false;
}

@Override
public boolean panStop(float arg0, float arg1, int arg2, int arg3) {
    // TODO Auto-generated method stub
    return false;
}

@Override
public boolean pinch(Vector2 arg0, Vector2 arg1, Vector2 arg2, Vector2 arg3) {
    // TODO Auto-generated method stub
    return false;
}

@Override
public boolean tap(float arg0, float arg1, int arg2, int arg3) {
    // TODO Auto-generated method stub
    return false;
}

@Override
public boolean touchDown(float arg0, float arg1, int arg2, int arg3) {
    // TODO Auto-generated method stub
    return false;
}

@Override
public boolean zoom(float arg0, float arg1) {
    // TODO Auto-generated method stub
    return false;
}

}

【问题讨论】:

  • 您正在平移正交相机,但您正在使用透视相机渲染模型批次。这可以解释为什么你的观点没有改变
  • 我也尝试使用相同的相机进行平移和渲染,但对象仍然没有移动:(
  • 你为什么说,你想平移 3D 对象,但你却在平移相机?
  • @TheWhiteLlama:我知道这是错误的,但我尝试了所有可能的方法。我的主要任务是平移 3d 对象,但我很困惑如何去做。我应该用相机做点什么吗?或者我应该在 pan 方法中做些什么...请帮助我是 libgdx 的新手

标签: android libgdx pan


【解决方案1】:
cam.position.set(1f, 1f, -10f);

更改cam 中的“z”(第三个参数)。

效果很好。

【讨论】:

  • 我添加了那行...在 pan 方法中我应该写什么?
  • @ParthDoshi in create() 只需更改您的这一行 cam.position.set(1f,1f,1f);到 cam.position.set(1f,1f,-10f);
  • 替换什么?我用 cam.position.set(1f,1f,-10f) 替换了 cam.position.set(1f,1f,1f)..我现在需要更改 pan 方法中的任何内容吗?
  • pan 方法里面的代码呢?我是否需要在其余代码中更改该行或任何其他行。请帮忙!谢谢
  • 但目前它在 X 方向平移相机.. 可以吗? `cam.translate(arg2,0,0) ?
猜你喜欢
  • 2013-03-25
  • 1970-01-01
  • 2013-12-19
  • 2016-07-19
  • 2014-03-31
  • 2015-12-24
  • 2013-07-12
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多