如何在opencv相机上绘制3D对象(rajawali)

时间:2014-02-28 13:38:04

标签: opencv opengl-es rajawali

我正在做一个项目,我需要在android中的opencv相机上渲染一个3D对象。我正在使用OpenGL ES rajawali进行渲染。使用下面给出的代码,它首先显示3D对象,然后打开相机。有时它会显示3D对象并同时打开相机。我不知道为什么会这样。我想在opencv相机上显示3D对象。你能帮帮我吗?

public void onCreate(Bundle savedInstanceState){         super.onCreate(savedInstanceState);

    getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
    openCvCameraView = (CameraBridgeViewBase) new JavaCameraView(this, -1);
  // openCvCameraView.setVisibility(mSurfaceView.VISIBLE);
    openCvCameraView.setCvCameraViewListener(this);
    mSurfaceView.setVisibility(openCvCameraView.VISIBLE);
    mLayout.addView(openCvCameraView);

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

} 

4 个答案:

答案 0 :(得分:0)

我在项目中做了类似的事情,如下面的剪辑所示:

AR Motion Detection on Android with OpenCV and OpenGL (Rajawali)

我已经为这个应用程序发布了整个项目代码,所以看一看是否有帮助。

你会在这里找到代码: https://github.com/timegalore/MotionDetectionAR

答案 1 :(得分:0)

我假设您想要在OCV相机顶部使用透明覆盖物,对吗?

在onCreate上,创建相机和曲面视图,然后在曲面视图上设置这些参数(假设为EGL 2.0):

        setEGLConfigChooser(8, 8, 8, 8, 16, 0);
        getHolder().setFormat(PixelFormat.TRANSLUCENT);
        setZOrderOnTop(true);

然后使用以下方法设置该表面的渲染器:

        setRenderer(mRenderer);

这应该是你应该在OCV表面上有一个透明的覆盖层。

重要说明: Rajawali的自定义活动假定您没有使用xml文件进行布局。我强烈建议您扩展Activity而不是RajawaliActivity

答案 2 :(得分:0)

@timegalore我试图执行你的项目,但发现了一个错误 “block10_obj丢失” http://i.stack.imgur.com/uWzMU.png

答案 3 :(得分:0)

截至快照Rajawali-1.0.186,没有 RajawaliActivity ,因此无法使用setGLBackgroundTransparent(true)
 但现在只需设置

即可使表面透明
  

mSurfaceView.setTransparent(true)

mSurfaceView的类型为RajawaliSurfaceView