如何在OpenCV相机(拉贾瓦利)上绘制3D对象



我正在做一个项目,我需要在安卓的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);
} 

我在项目中做了一些非常相似的事情,如以下剪辑所示:

Android 上的 AR 运动检测与 OpenCV 和 OpenGL (Rajawali)

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

您将在此处找到代码:https://github.com/timegalore/MotionDetectionAR

我假设你想要在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

@timegalore 我试图执行您的项目但发现错误"block10_obj不见了"https://i.stack.imgur.com/uWzMU.png

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

mSurfaceView.setTransparent(true)

其中mSurfaceView属于类型 RajawaliSurfaceView

最新更新