2016-08-09 89 views
0

我正在嘗試創建一個AR遊戲。我使用的方法是https://github.com/chili-epfl/libgdx-sample/blob/master/core/src/ch/epfl/chili/libgdx_sample/LibgdxSample.java,但是在deviceCameraControl.renderBackground()之後;我想呈現舞臺。LibGdx不使用紋理(混合OpenGL本機和LibGDX)

該階段包含此刻一個圖像。這將正確顯示,直到首先繪製相機預覽爲止。一旦發生這種情況,而不是加載的圖像,它再次顯示相機預覽,縮小到圖像的大小。因此,它看起來像不是使用加載的圖像,而是再次顯示相機預覽的紋理。

這可能是什麼原因以及如何解決?

整個渲染方法目前看起來像這樣(簡化):

if (crosshair == null) { 
     crosshair = new Image(new Texture(Gdx.files.internal("data/image0008.png"))); 
     crosshair.setPosition(stage.getWidth()/2 - crosshair.getWidth() - 2, stage.getHeight()/2 - crosshair.getHeight()/2); 
     stage.addActor(crosshair); 
    } 
    Gdx.gl.glViewport(0, 0, Gdx.graphics.getWidth(), Gdx.graphics.getHeight()); 
    Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT | GL20.GL_DEPTH_BUFFER_BIT); 
    if (device_cam == null) { 
     device_cam = new MobileCameraView(game, game.getCameraControler()); 
     device_cam.init((int) w, (int) h); 
    } else if (device_cam.isStopped()) device_cam.start(); 
    else { 
     device_cam.renderBackground(); 
    } 

    camera.update(true); 

    getStage().act(delta); 
    getStage().draw(); 
+0

只是胡亂猜測,加上'Gdx.gl20.glActiveTexture(GL20.GL_TEXTURE0);只需繪製階段之前'。 – Xoppa

+0

是的,就是這樣!非常感謝。 (不知道它做了什麼,但它的工作原理;-))我想標記你的答案是正確的,但這是不可能的評論... – mbauer

回答

0

因此,對所有遇到同樣的問題:Xoppa的「胡亂猜測」完全解決了這個問題。然後,簡化代碼應該是這樣的:

if (crosshair == null) { 
    crosshair = new Image(new Texture(Gdx.files.internal("data/image0008.png"))); 
    crosshair.setPosition(stage.getWidth()/2 - crosshair.getWidth()/2, stage.getHeight()/2 - crosshair.getHeight()/2); 
    stage.addActor(crosshair); 
} 
Gdx.gl.glViewport(0, 0, Gdx.graphics.getWidth(), Gdx.graphics.getHeight()); 
Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT | GL20.GL_DEPTH_BUFFER_BIT); 
if (device_cam == null) { 
    device_cam = new MobileCameraView(game, game.getCameraControler()); 
    device_cam.init((int) w, (int) h); 
} else if (device_cam.isStopped()) device_cam.start(); 
else { 
    device_cam.renderBackground(); 
} 

camera.update(true); 
Gdx.gl20.glActiveTexture(GL20.GL_TEXTURE0); 
getStage().act(delta); 
getStage().draw();