2014-02-09 83 views
0

我正在嘗試平移3d對象,但似乎不起作用。我向左右方向滑動手勢以沿x軸平移對象。我已經添加了一條Log聲明,並清楚地顯示了logcat中的pan值,但該對象仍然不會移動。使用libgdx平移3D模型

這裏是我的代碼

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; 
} 

} 
+0

您正在平移正交相機,但是正在使用透視相機呈現模型批處理。這可以解釋爲什麼你的視圖不會改變 – nhydock

+0

我嘗試使用相同的相機進行平移和渲染,但仍然不會移動對象:( –

+0

爲什麼你要說,你想平移3D對象,重新翻譯相機? – TheWhiteLlama

回答

1
cam.position.set(1f, 1f, -10f); 

cam改變你的 「Z」(第三個參數)。

它工作正常。

+0

有所瞭解我在pan方法中添加了一行...我應該寫什麼? –

+0

@ParthDoshi in create()只是改變你的這一行cam.position。設置(1f,1f,1f);到cam.position.set(1f,1f,-10f); – jpm

+0

替換什麼?用cam.position.set替換cam.position.set(1f,1f,1f) ,1f,-10f)..我現在需要更換pan方法嗎? –