-1

我正在做一个项目,我需要在 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

4 回答 4

0

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

使用 OpenCV 和 OpenGL (Rajawali) 在 Android 上进行 AR 运动检测

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

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

于 2014-02-28T17:24:40.007 回答
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

于 2014-05-29T15:34:14.853 回答
0

@timegalore 我尝试执行您的项目,但发现错误“block10_obj is missing” http://i.stack.imgur.com/uWzMU.png

于 2015-05-10T11:07:15.623 回答
0

截至快照 Rajawali-1.0.186 没有RajawaliActivity,因此无法使用setGLBackgroundTransparent(true)
但现在您可以通过设置简单地使表面透明

mSurfaceView.setTransparent(true)

mSurfaceView类型在哪里RajawaliSurfaceView

于 2017-01-15T17:26:28.073 回答