2014-02-12 36 views

回答

1

我使用Rajawali,它是OpenGL的疊加層。

http://www.rozengain.com/blog/2011/08/23/announcing-rajawali-an-opengl-es-2-0-based-3d-framework-for-android/

我強烈建議你使用它作爲也需要花費大量的OpenGL的痛苦了。無論如何,我在下面提到的確涉及到一些Rajawali代碼,但原則應該是相似的,你應該能夠挑選出你需要的東西。如果你看看這裏,看看我的工作成果:

http://www.youtube.com/watch?v=yEioXZT-lv0

要做到這一點,我創建了攝像機視圖編程,而不是在佈局XML。我不得不去玩一下一下,但對於我下面的工作 - 這正好在你的活動onCreate方法:

mOpenCvCameraView = (CameraBridgeViewBase) new JavaCameraView(this, -1); 
    mOpenCvCameraView.setCvCameraViewListener(this); 

    mLayout.addView(mOpenCvCameraView); 

    mSurfaceView.setZOrderMediaOverlay(true); 
    setGLBackgroundTransparent(true); 
    mRenderer = new OpenGLRenderer(this); 
    mRenderer.setSurfaceView(mSurfaceView); 
    super.setRenderer(mRenderer); 

mRenderer.setCameraPosition(0, 0, 20); 

OpenGLRenderer這裏延伸RajawaliRenderer,進而延伸GLSurfaceView.Renderer。可能最好查看後兩者的源代碼,而不是在這裏重現。在我的OpenGLRenderer中,我在initScene()方法中設置了對象,相機等。我還添加了一些方法,可以從活動被調用,以控制物體移動等

我的活動與以下列出的那類的關鍵要素的延伸RajawaliActivity:

public class RajawaliActivity extends Activity { 
protected GLSurfaceView mSurfaceView; 
protected FrameLayout mLayout; 
protected boolean mUsesCoverageAa; 
private RajawaliRenderer mRajRenderer; 
protected boolean checkOpenGLVersion = true; 
protected boolean mDeferGLSurfaceViewCreation = false; 

@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    if(!mDeferGLSurfaceViewCreation) 
     createSurfaceView(); 
} 

protected void createSurfaceView() 
{ 
    mSurfaceView = new GLSurfaceView(this); 

    ActivityManager am = (ActivityManager)getSystemService(Context.ACTIVITY_SERVICE); 

    mSurfaceView.setEGLContextClientVersion(2); 

    mLayout = new FrameLayout(this); 
    mLayout.addView(mSurfaceView); 


    setContentView(mLayout); 
} 

希望這有助於 - 祝你好運!

+0

感謝你的幫助。我從代碼google https://code.google.com/p/andar/上獲得了一些有用的幫助。 – Choris

+0

好的謝謝 - 看起來不錯。 – timegalore

0

你可以在你的onCreate()方法中這樣做。請記住,在setFormat(PixelFormat.TRANSLUCENT)構造MyGLSurfaceView:

mGLView = new MyGLSurfaceView(this); 
    setContentView(mGLView); 

    mOpenCvCameraView = (CameraBridgeViewBase) new JavaCameraView(this, -1); 
    mOpenCvCameraView.setCvCameraViewListener(this); 
    addContentView(mOpenCvCameraView, new LayoutParams(
      LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT));